【问题标题】:C# Dealing with whitespacesC# 处理空格
【发布时间】:2015-08-31 22:07:23
【问题描述】:

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

我也有一个问题,我的第一个字母是大写,它会在第一个单词上输入一个空格。我该如何解决这个问题并将其实现到我的代码中。

例子:

“你好”

输出

“你好”

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

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

【问题讨论】:

  • 尝试将双引号\语音标记替换为单引号,因为这表示字符
  • 旁注:如果您可以使用StringBuilder,代码会很简单... 或者,匹配 {lowerCase,upperCase} 对的简单正则表达式将使其成为一个语句。
  • @AlexeiLevenkov 我是新手,如果您可以使用我的代码作为示例并发布答案将非常感谢您

标签: c# arrays linq char whitespace


【解决方案1】:

我会使用正则表达式在每个大写字母前插入空格:

var result = "HelloThere";
Console.WriteLine(Regex.Replace(result, @"\s*(\p{Lu})", " $1"));

请注意,\s* 匹配 0 个或多个空白字符,\p{Lu} 匹配任何 Unicode 大写字母。大写字母被捕获到Group 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);    
}

【讨论】:

  • 从代码中 if Regex.Replace(result, @"(\S)(\p{Lu})", "$1 $2"));我的for循环的功能,我该如何在我的代码中实现它?
  • 例如,如果我的搅拌有双倍空格,我该如何应用每个空格只能是 1 个空格的规则。
  • 什么是可能的,示例输入字符串?我知道我可能对目标有点误解:即使在字符串的开头也需要添加空格,对吧?
  • 我有一个包含字符串“Hello Test”的测试单元,这是双空格,另一个包含“HelloTest”的测试单元没有空格。
  • 如果你能告诉我把你提供的代码放在哪里会很好,而且从正则表达式中这会使我的 for 语句变得多余,所以我现在可以删除它?
【解决方案2】:

尝试使用下面的代码,它会替换每个 Camel Case 单词之间的空格:

var inputStr= "HemantPatel";
var result = Regex.Replace(inputStr, "([a-z])([A-Z])", @"$1 $2"); //Category Name

输出将是:“Hemant Patel”

【讨论】:

    【解决方案3】:

    如果您想让您的代码与您建议的内容相似,请尝试此操作,否则请选择其他建议的简短好的解决方案之一:

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

    【讨论】:

      猜你喜欢
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多