0

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

    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));
    }

一堆内联数据测试失败。可以看出我正在玩 Space & Tab。

期望的效果:取一个字符串并用任何空格分割它

请问我错过了什么?如何获取字符串并按空格拆分

我尝试了以下所有方法均无济于事

// 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]);
4

2 回答 2

2

以下将解决您的问题:

//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; }
于 2019-12-01T23:39:37.333 回答
2

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

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

在这种情况下,您有空格' '和制表符'\t'

于 2019-12-01T23:31:18.337 回答