C#处理空格

时间:2015-08-31 22:07:23

标签: c# arrays linq char whitespace

我有一个输入字符串,它被放入 result ,然后从那里转换成 char [] 我将第一个字母写成大写字母。我的问题是在for语句中我试图在每个大写字母前加上一个空格。 它无法识别 insert(),因为 char [] 有什么替代品?

我还有一个问题,就是我的第一个字母是首都,它会在第一个单词上输入一个空格。如何解决此问题并将其实施到我的代码中。

示例:

“HelloThere”

输出

“Hello There”

我是否将其插入新的字符串名称?并返回而不是输出,例如char [] final将是最后的回归。

最后,必须在每个大写之前添加空格,如何应用只允许1个空格的规则?

3 个答案:

答案 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[]定义的扩展方法。