2

一連の区切り文字を使用して、C# で文字列を分割する必要があります。このセットには、デフォルトの空白 (つまり、あなたが実際に取得するものString.Split(null, StringSplitOptions.RemoveEmptyEntries)) に加えて、「.」、「,」、「;」などのように指定した追加の文字が含まれている必要があります。したがって、これらの追加の文字の char 配列がある場合、その展開された配列をにフィードするために、すべてのデフォルトの空白を追加する方法はString.Split? または、カスタム区切り文字セット + 空白を使用して分割するより良い方法はありますか? どうも

4

5 に答える 5

3

string.Split少なくとも .NET 2.0 を使用している場合は、適切なオーバーロードを使用してください。

char[] separator = new[] { ' ', '.', ',', ';' };
string[] parts = text.Split(separator, StringSplitOptions.RemoveEmptyEntries);

不完全な答えのために私は反対票を投じられたと思います。OPは、すべての空白(私のPCでは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);
于 2012-12-06T21:15:42.180 に答える
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"
于 2014-11-03T20:15:00.593 に答える
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ドキュメントを参照してください。

于 2016-10-28T18:39:48.720 に答える
1
str.Split(" .,;".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
于 2012-12-06T21:17:17.690 に答える
0
string[] splitSentence(string sentence)
{
     return sentence
     .Replace(",", " , ")
     .Replace(".", " . ")
     .Split(' ', StringSplitOptions.RemoveEmptyEntries)
} 

また

string[] result = test.Split(new string[] {"\n", "\r\n"},
                     StringSplitOptions.RemoveEmptyEntries);
于 2012-12-06T21:17:43.640 に答える