2012-07-18 78 views
-2

我們有一個字符串(0 .. N simbols長)。如何找出它的第一個simbol是否爲"_",如果是,請將其除去並製作首字母大寫(例如"_distance"=>"Distance")?如何找出是否第一個simbol是「_」,如果真的刪除它,並使第一個字母大寫?

我想知道一般 - 我很愚蠢,而我正在研究創建Unity3d CustomEditor組件可見Inspector。所以想法 - 如果類費爾德與_開始做解析等

但appeares在Unity3d對於這通常是這樣寫_name當你的東西它標誌像[SerializeField]檢查私有類字段自動做這種事。

+1

你試了一下自己? – comecme 2012-07-18 11:30:42

回答

5

很瑣碎,實際上是:

if (s.StartsWith("_")) { 
    s = s.Substring(1, 1).ToUpper() + s.Substring(2); 
} 

讀取幾乎相同,你的描述,其實。如果ñ小於2。它會失敗,但你可以單獨檢查的是,如:

if (s.Length >= 2 && s.StartsWith("_")) 
+0

+而不是=:P – 2012-07-18 11:06:57

+4

我會使用's.StartsWith(「_」)'作爲測試,以便您不必檢查空字符串。 – xanatos 2012-07-18 11:08:38

+0

好點。也錯過了。 – Joey 2012-07-18 11:09:00

1

凌亂的一行:

String name = "_distance"; 
name = (name.StartsWith("_") ? (name.Length > 1 ? name.Substring(1, 1).ToUpper() + (name.Length > 2 ? name.Substring(2) : "") : "") : name); 

一行程序更清晰的版本:

String name = "_distance"; 
if (name.StartsWith("_")) 
{ 
    if (name.Length > 1) 
    { 
     name = name.Substring(1, 1).ToUpper() + (name.Length > 2 ? name.Substring(2) : ""); 
    } 
    else 
    { 
     name = ""; 
    } 
} 

Extention版本:

public static String ParseCapitalize(this String str) 
{ 
    if (str == null) 
     return ""; 
    if (str.StartsWith("_")) 
    { 
     if (str.Length > 1) 
     { 
      return str.Substring(1, 1).ToUpper() + (str.Length > 2 ? str.Substring(2) : ""); 
     } 
     else 
     { 
      return ""; 
     } 
    } 
    return str; 
} 

//Usage: 
String s = "_this is a string"; 
if(!String.IsNullOrEmpty(s)) 
    s = s.ParseCapitalize(); 

這些片段將處理:

「」=> 「」

「_」=> 「」

「_a」=> 「A」

「_asd」=> 「性Asd」

「ASD」=> 「ASD」

(對於進一步擴展唯一)空=> 「」

+0

'name =「_」' – SWeko 2012-07-18 11:11:32

+0

已失敗。請刪除downvote。 – Pluc 2012-07-18 13:38:24

+0

@Pluc您應該在您的擴展方法中檢查null以避免潛在的NRE。 – ken2k 2012-07-18 14:04:28

2

嘗試

if (s != null && s.Length >= 2 && s[0] == '_') { 
    s = Char.ToUpper(s[1]) + s.Substring(2); 
} 

如果你知道s不能null,刪除第一次測試。

if (s.Length >= 2 && s[0] == '_') { 
    s = Char.ToUpper(s[1]) + s.Substring(2); 
} 
相關問題