我需要使用一组分隔符字符在C#中分割字符串。此集应包括默认空格(即您String.Split(null, StringSplitOptions.RemoveEmptyEntries)
时实际获得的内容)以及我指定的其他字符,如'。',',',& #39 ;;'等等。如果我有一个包含这些附加字符的char数组,如何向其添加所有默认空格,以便将扩展后的数组提供给String.Split
?或者是否有更好的方法使用我的自定义分隔符集+空格分割? THX
答案 0 :(得分:3)
如果您至少使用.NET 2.0,请使用string.Split
的适当重载:
char[] separator = new[] { ' ', '.', ',', ';' };
string[] parts = text.Split(separator, StringSplitOptions.RemoveEmptyEntries);
我猜我因为答案不完整而受到了贬低。 OP已经要求一种方法来分割所有的空格(在我的电脑上是25),还有其他分隔符:
public static class StringExtensions
{
static StringExtensions()
{
var whiteSpaceList = new List<char>();
for (int i = char.MinValue; i <= char.MaxValue; i++)
{
char c = Convert.ToChar(i);
if (char.IsWhiteSpace(c))
{
whiteSpaceList.Add(c);
}
}
WhiteSpaces = whiteSpaceList.ToArray();
}
public static readonly char[] WhiteSpaces;
public static string[] SplitWhiteSpacesAndMore(this string str, IEnumerable<char> otherDeleimiters, StringSplitOptions options = StringSplitOptions.None)
{
var separatorList = new List<char>(WhiteSpaces);
separatorList.AddRange(otherDeleimiters);
return str.Split(separatorList.ToArray(), options);
}
}
现在您可以这样使用此扩展方法:
string str = "word1 word2\tword3.word4,word5;word6";
char[] separator = { '.', ',', ';' };
string[] split = str.SplitWhiteSpacesAndMore(separator, StringSplitOptions.RemoveEmptyEntries);
答案 1 :(得分:2)
上面的答案不会使用所有空白字符作为分隔符,因为您在请求中说明的只是程序指定的分隔符。在上面的解决方案示例中,这只是SPACE,而不是TAB,CR,LF和所有其他Unicode定义的空白字符。
我还没有找到从String中检索默认空格字符的方法。但是,它们在Regex中定义,您可以使用它而不是String。在您的情况下,将句点和逗号添加到正则表达式空白集:
Regex regex = new Regex(@"[\s\.,]+"); // The "+" will remove blank entries
input = @"1.2 3, 4";
string[] tokens = regex.Split(input);
将产生
tokens[0] "1"
tokens[1] "2"
tokens[2] "3"
tokens[3] "4"
答案 2 :(得分:1)
str.Split(" .,;".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
答案 3 :(得分:1)
我使用以下内容确保我始终拆分Split的默认空白字符:
public static string[] SplitOnWhitespaceAnd(this string value,
char[] separator, StringSplitOptions options = StringSplitOptions.RemoveEmptyEntries)
=> value.Split().SelectMany(s => s.Split(separator, options)).ToArray();
请注意,为了与Microsoft的命名约定保持一致,您需要使用WhiteSpace而不是Whitespace。
请参阅Microsoft的Char.IsWhiteSpace文档,以查看默认情况下拆分的空白字符。
答案 4 :(得分:0)
string[] splitSentence(string sentence)
{
return sentence
.Replace(",", " , ")
.Replace(".", " . ")
.Split(' ', StringSplitOptions.RemoveEmptyEntries)
}
或
string[] result = test.Split(new string[] {"\n", "\r\n"},
StringSplitOptions.RemoveEmptyEntries);