如何将1个字符串分成多个字符串

时间:2013-07-15 15:15:22

标签: c# string

如何使用C#将“ThisIsMyTestString”转换为“This Is My Test String”?

有快速的方法吗?

我一直在想一个伪代码,但它很复杂而且丑陋:

String s = "ThisIsMyTestString";

List<String> strList = new List<String>();
for(int i=0; i < str->Length ; i++)
{
   String tmp = "";
   if (Char.IsUpper(str[i]))
   {
     tmp += str[i];
     i++;
   }

   while (Char::IsLower(str[i]))
   {
     tmp += str[i];
     i++;
   }

   strList .Add(tmp);
}

String tmp2 = "";
for (uint i=0 ; i<strList.Count(); i++)
{
  tmp2 += strList[i] + " ";
}

4 个答案:

答案 0 :(得分:5)

您可以使用此处概述的正则表达式:

Regular expression, split string by capital letter but ignore TLA

你的正则表达式:“((?&lt; = [a-z])[A-Z] | A-Z)”

查找并替换为“$ 1”

string splitString = Replace("ThisIsMyTestString", "((?<=[a-z])[A-Z]|[A-Z](?=[a-z]))", " $1")

这里(?<=...)是一个“积极的外观,一个应该在比赛之前的正则表达式。在这种情况下,lookbehind是”characters“a'到'z'” (?=...)是一个类似于lookahead的构造,其中匹配必须后跟正则表达式描述的字符串。在这种情况下,前瞻是“字符'a'到'z'” 在这两种情况下,最终匹配包含一个字符“A”到“Z”后跟“a” - “z”或一个字符“a”到“z”后跟一个大写字母。替换这些匹配会在大写和小写字母之间留出空格

答案 1 :(得分:3)

不是最佳代码,但可行

String.Join("", s.Select(c => Char.IsUpper(c) ? " " + c : c.ToString())).Trim()

答案 2 :(得分:1)

lazyberezovsky用一个更简单的解决方案打败了我...但这会产生更少的垃圾,所以我不会删除它。

static void Main(string[] args)
{
    Console.WriteLine(SplitByCase("ThisIsMyString"));
    Console.ReadLine();
}

static string SplitByCase(string str, bool upper = true)
{
    return String.Join(" ", SplitIntoWords(str, c => Char.IsUpper(c)));
}

static IEnumerable<String> SplitIntoWords(string str, Func<char, bool> splitter)
{
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < str.Length; i++)
    {
        sb.Append(str[i]);
        if (i + 1 == str.Length || splitter(str[i + 1]))
        {
            yield return sb.ToString();
            sb.Clear();
        }
    }
}

答案 3 :(得分:0)

这将为该字符串执行:

            String s = "ThisIsMyTestString";
            StringBuilder result = new StringBuilder();
            result.Append(s[0]);
            for (int i = 1; i < s.Length; i++)
            {
                if (char.IsUpper(s[i]) )
                    result.Append(' ');
                result.Append(s[i]);
            }
            s = result.ToString();