我有一个输入字符串,它被放入 result ,然后从那里转换成 char [] 我将第一个字母写成大写字母。我的问题是在for语句中我试图在每个大写字母前加上一个空格。 它无法识别 insert(),因为 char [] 有什么替代品?
我还有一个问题,就是我的第一个字母是首都,它会在第一个单词上输入一个空格。如何解决此问题并将其实施到我的代码中。
示例:
“HelloThere”
输出
“Hello There”
我是否将其插入新的字符串名称?并返回而不是输出,例如char [] final将是最后的回归。
最后,必须在每个大写之前添加空格,如何应用只允许1个空格的规则?
答案 0 :(得分:2)
我会使用正则表达式在每个大写字母前插入空格:
var result = "HelloThere";
Console.WriteLine(Regex.Replace(result, @"\s*(\p{Lu})", " $1"));
请注意\s*
匹配0个或更多空格字符,\p{Lu}
匹配任何Unicode大写字母。大写字母被捕获到组1中,并且在替换字符串的帮助下,空格被添加到大写字母字符串的前面。
请参阅IDEONE demo
不要忘记添加using System.Text.RegularExpressions
指令。
这是一个full example,其中正则表达式在静态类中声明:
public static void Main()
{
var result = "HelloThere";
Console.WriteLine(Regexes.rxAddSpaceBeforeCapital.Replace(result, " $1"));
result = "Hello There";
Console.WriteLine(Regexes.rxAddSpaceBeforeCapital.Replace(result, " $1"));
}
public static class Regexes
{
public static readonly Regex rxAddSpaceBeforeCapital = new Regex(@"\s*(\p{Lu})", RegexOptions.Compiled);
}
答案 1 :(得分:1)
尝试使用以下代码,它将替换每个Camel Case字之间的空格:
var inputStr= "HemantPatel";
var result = Regex.Replace(inputStr, "([a-z])([A-Z])", @"$1 $2"); //Category Name
输出将是:“Hemant Patel”
答案 2 :(得分:0)
如果您希望保持代码与您的建议类似,请尝试此操作,否则请选择其中一个简短的优秀解决方案:
// Example string.
string result = " helloThere, ThisIs AnExampleString ";
// Remove leading and trailing white spaces.
result = result.Trim();
// Capitalize first letter.
result = char.ToUpper(result[0]) + result.Substring(1);
// Replace long white spaces with just one white space,
// e.g. "Hello World" -> "Hello World"
result = Regex.Replace(result, @"[ ]{2,}", " ");
// Insert spaces before capital letters.
for (var i = 1; i < result.Length; i++)
{
if (char.IsLower(result[i - 1]) && char.IsUpper(result[i]))
{
result = result.Insert(i, " ");
}
}
// OUTPUT: "Hello There, This Is An Example String"
顺便说一句,在您的代码中,Insert
方法无法正常工作,因为它是未为类型char[]
定义的扩展方法。