代码之家  ›  专栏  ›  技术社区  ›  James Raitsev

按空格分隔字符串,需要澄清[重复]

  •  0
  • James Raitsev  · 技术社区  · 4 年前

    我有一个方法我正在尝试测试

        public static string BySpace(string s, int position)
        {
            return s.Split()[position];
        }
    

    我有个测试功能

        [Theory]
        [InlineData("a  b   c   d")]
        [InlineData(" a  b   c   d")]
        [InlineData("a  b   c   d ")]
        [InlineData("a b c d")]
        [InlineData(" a b c d ")]
        public void TestParseToList(string s)
        {
            Assert.Equal("a", Util.BySpace(s, 0));
            Assert.Equal("b", Util.BySpace(s, 1));
            Assert.Equal("c", Util.BySpace(s, 2));
            Assert.Equal("d", Util.BySpace(s, 3));
        }
    

    一堆内联数据测试失败。可以看出我在玩空格键。

    想要的效果:取一个字符串并用任意空格分隔它

    我少了什么?我怎么能把一根绳子按空格分开

    我试了下面所有的方法都没有用

    // return s.Split()[position];
    // return s.Split(' ')[position];
    // return s.Split("\\s+")[position];  <----- i had high hopes for this one
    // return s.Split(null)[position];
    // return s.Split(new char[0])[position];
    creturn s.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)[position]);
    
    2 回复  |  直到 4 年前
        1
  •  2
  •   Simply Ged Saeed    4 年前

    当你打电话 Split 可以传递要拆分的多个字符:

    return s.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries)[position];
    

    在这种情况下,你有空间 ' ' 和标签页 '\t'

        2
  •  2
  •   Byron Jones    4 年前

    以下内容将解决您的问题:

    //avoid null reference exception
    if(!string.IsNullOrEmpty(s))
    {
       //remove any whitespace to the left and right of the string
       s = s.Trim();
       // Here we use a regular expression, \s+
       // This means split on any occurrence of one or more consecutive whitespaces.
       // String.Split does not contain an overload that allows you to use regular expressions
       return System.Text.RegularExpressions.Regex.Split(s, "\\s+")[position];
    }
    else { return null; }