【问题标题】:Split alphanumeric string to array containing the alphabet and numeric characters separately将字母数字字符串拆分为分别包含字母和数字字符的数组
【发布时间】:2013-09-30 07:11:37
【问题描述】:

我正在寻找一种方法来拆分字母数字字符串,例如

"Foo123Bar"

到一个包含它的数组中

array[0] = "Foo"
array[1] = "123"
array[2] = "Bar"

我不确定实现此目的的最佳方法是什么,尤其是因为我要比较的字符串没有遵循特定模式,至于哪个是第一个、字母或数字,或者它们每个出现多少次。例如,它可能如下所示:

"Foo123Bar"
"123Bar"
"Foobar123"
"Foo123Bar2"

我正在尝试找出是否有更有效的方法来执行此操作,而不是按字符拆分字符串并检查它是否为数字。

【问题讨论】:

  • "Foobar123" 的结果应该是什么,应该是Foo, bar and 123 or Foobar and 123
  • "Foobar123" 的结果应该是"Foobar""123"

标签: c# arrays string list split


【解决方案1】:
string input = "Foo123Bar";
var array = Regex.Matches(input, @"\D+|\d+")
                 .Cast<Match>()
                 .Select(m => m.Value)
                 .ToArray();

【讨论】:

    【解决方案2】:

    我认为您不会检查字符串的每个字符。
    你可以试试这样的:

    string[] SplitMyString(string s)
    {
      if( s.Length == 0 )
        return new string[0];
    
      List<string> split = new List<string>(1);
      split.Add("");
    
      bool isNumeric = s[0] >= '0' && s[0] <= '9';
      foreach(char c in s)
      {
        bool AddString = false;
        if( c >= '0' && c <= '9' )
        {
          AddString = !isNumeric;
          isNumeric = true;
        }
        else
        {
          AddString = isNumeric;
          isNumeric = false;
        }
        if( AddString )
            split.Add(c.ToString());
        else
          split[split.Count-1] += c;
      }
      return split.ToArray();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多