我们有一个字符串(0 .. N
simbols long)。如何确定它的第一个simbol是否为"_"
,如果为true则将其删除并设为首字母大写(来自"_distance"
=>
"Distance"
示例?
我总体上想知道 - 我是如此愚蠢,而我正在调查Unity CustomEditor
组件的创建可见Inspector
。所以想法是 - 如果类别开始于_
进行解析等。
但它在Unity3d中出现的私有类字段通常写为_name
,当你用[SerializeField]
标记{{1}}时,检查员将自动执行此类操作。< / p>
答案 0 :(得分:5)
非常琐碎,实际上:
if (s.StartsWith("_")) {
s = s.Substring(1, 1).ToUpper() + s.Substring(2);
}
实际上,读取与您的描述几乎相同。如果 N 小于2,它将失败。但你可以单独检查,例如:
if (s.Length >= 2 && s.StartsWith("_"))
答案 1 :(得分: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);
}
答案 2 :(得分: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 = "";
}
}
扩展版本:
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();
这些片段将处理:
“”=&gt; “”
“_”=&gt; “”
“_ a”=&gt; “A”
“_ asd”=&gt; “性Asd”
“asd”=&gt; “ASD”
(仅限扩展名)null =&gt; “”