-2

我们有一个字符串(0 .. N长符号)。如何确定它的第一个 simbol 是否为"_"真,如果为真,则删除它并使首字母大写(例如"_distance" => "Distance")?

总的来说,我想知道 - 我太愚蠢了,而我正在研究创建 Unity3dCustomEditor组件对Inspector. 所以想法是 - 如果类字段以_解析等开始。

但似乎在 Unity3d 中,私有类字段通常写成_name当你用[SerializeField]检查器之类的东西标记它时自动做这样的事情。

4

3 回答 3

5

非常微不足道,实际上:

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

读起来几乎和你的描述一样,实际上。如果N小于 2,它将失败。但您可以单独检查,例如:

if (s.Length >= 2 && s.StartsWith("_"))
于 2012-07-18T11:06:09.363 回答
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);
}
于 2012-07-18T11:23:31.427 回答
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();

这些片段将处理:

"" => ""

“_” => “”

“_a” => “A”

“_asd” => “Asd”

“asd” => “asd”

(仅用于扩展) null => ""

于 2012-07-18T11:10:08.547 回答