如何确定第一个符号是否为“_”,如果为真,则将其删除并制作首字母大写字母?

时间:2012-07-18 11:04:20

标签: c# .net .net-3.5 unity3d

我们有一个字符串(0 .. N simbols long)。如何确定它的第一个simbol是否为"_",如果为true则将其删除并设为首字母大写(来自"_distance" => "Distance"示例?

我总体上想知道 - 我是如此愚蠢,而我正在调查Unity CustomEditor组件的创建可见Inspector。所以想法是 - 如果类别开始于_进行解析等。

但它在Unity3d中出现的私有类字段通常写为_name,当你用[SerializeField]标记{{1}}时,检查员自动执行此类操作。< / p>

3 个答案:

答案 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; “”

相关问题