Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将一个字符串分隔为多个字符串_C#_String - Fatal编程技术网

C# 如何将一个字符串分隔为多个字符串

C# 如何将一个字符串分隔为多个字符串,c#,string,C#,String,如何使用C#将“ThisIsMyTestString”转换为“ThisIsMyTestString” 有没有快速的方法 我一直在想一个伪代码,但它既复杂又难看: String s = "ThisIsMyTestString"; List<String> strList = new List<String>(); for(int i=0; i < str->Length ; i++) { String tmp = ""; if (Char.IsUp

如何使用C#将“ThisIsMyTestString”转换为“ThisIsMyTestString”

有没有快速的方法

我一直在想一个伪代码,但它既复杂又难看:

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] + " ";
}
String s=“thismyteststring”;
List strList=新列表();
对于(int i=0;iLength;i++)
{
字符串tmp=“”;
if(Char.IsUpper(str[i]))
{
tmp+=str[i];
i++;
}
while(Char::IsLower(str[i]))
{
tmp+=str[i];
i++;
}
strList.Add(tmp);
}
字符串tmp2=“”;

对于(uint i=0;i您可以使用正则表达式,如下所述:


您的正则表达式:“(?不是最好的代码,但它可以工作

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

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();
        }
    }
}
static void Main(字符串[]args)
{
Console.WriteLine(SplitByCase(“ThisIsMyString”);
Console.ReadLine();
}
静态字符串拆分按大小写(字符串str,bool upper=true)
{
返回String.Join(“,splitintoords(str,c=>Char.IsUpper(c));
}
静态IEnumerable拆分为字(字符串str、函数拆分器)
{
StringBuilder sb=新的StringBuilder();
对于(int i=0;i
这将对该字符串执行此操作:

            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();
String s=“thismyteststring”;
StringBuilder结果=新建StringBuilder();
结果.追加(s[0]);
对于(int i=1;i
这里有一个非常相似的问题:就我个人而言,只要你发现一个字符是
<97
你写的代码的输出是什么?说“它太难看了,我甚至没有试图修复它”表示你不愿意去调试你自己的代码。我在“这是我的测试字符串”中只看到一个字符串"。您确定要将一个字符串分隔为多个字符串吗?致作者:为什么您认为这种方式很难看?当然,正则表达式有更好的解决方案,但…这也很好。当然,您必须为tmp变量使用StringBuilder,必须编写更漂亮的代码样式长字符串这可能会导致内存spike@StenPetrov完整的ely同意你的观点+1正则表达式在这里是一个很好的解决方案。但是有人能解释一下它的作用吗???正则表达式查找从A到Z的字符,前面是字符A到Z,每个实例都发现它用空格替换实例,后面是字符found请参见答案更新谢谢你,非常有用!
            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();