C# 如何确定第一个simbol是否为_&引用;如果为真,请将其删除并将第一个字母大写?
我们有一个字符串(C# 如何确定第一个simbol是否为_&引用;如果为真,请将其删除并将第一个字母大写?,c#,.net,.net-3.5,unity3d,C#,.net,.net 3.5,Unity3d,我们有一个字符串(0..Nsimbols-long)。如何确定它的第一个simbol是否为“\code>”,如果为true,则将其删除并使第一个字母大写(例如“\u distance”=>“” “\”=>“” “_a”=>“a” “\u asd”=>“asd” “asd”=>“asd” (仅适用于扩展名)null=>“”请重试 if (s != null && s.Length >= 2 && s[0] == '_') { s = Char.ToUp
0..N
simbols-long)。如何确定它的第一个simbol是否为“\code>”,如果为true,则将其删除并使第一个字母大写(例如“\u distance”
=>
)
总的来说,当我调查Unity3dCustomEditor
组件的创建时,我感到很奇怪,我是如此的愚蠢。所以这个想法是——如果类feild以开头,那么执行解析等
但是看起来,在Unity3d中,对于私有类字段,当您使用类似于[SerializeField]
的东西标记它时,通常像\u name
那样编写,inspector将自动执行这样的操作。非常简单,实际上:
if (s.StartsWith("_")) {
s = s.Substring(1, 1).ToUpper() + s.Substring(2);
}
实际上,读起来几乎和你的描述一样。如果N小于2,它将失败。但您可以单独检查,例如:
if (s.Length >= 2 && s.StartsWith("_"))
凌乱的一行:
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 = "";
}
}
一个班轮的更清晰版本:
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”
“\u asd”=>“asd”
“asd”=>“asd”
(仅适用于扩展名)null=>“”请重试
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);
}
我将使用s.StartsWith(“”)
作为测试,这样您就不必检查空字符串。@Pluc您应该在扩展方法中检查null以避免潜在的NRE。@Pluc不,您必须检查NRE。扩展方法只是一些静态方法的语法糖,这些静态方法以正常参数作为输入。只需使用字符串z=null测试代码;z、 ParseCapitalize()代码>,则在扩展方法中抛出NRE,而不是在其调用代码中。编辑:你同时修复了代码:)嘿,我在发表评论后测试了它^^谢谢你提供的信息!