1

テキスト ファイルから読み取った文字列オブジェクトの配列を生成する割り当てに取り組んでいます。単語にアポストロフィ (') またはハイフン (-) が単語の一部として含まれている場合、それを含める必要があるため、正規表現の \W 演算子を使用できません。\W はそれらのトークンで分割します。ただし、数字を含め、文字以外のすべてのものに分割する必要があります。したがって、文字列には az,AZ,-,' 形式を含める必要があります。

私が持っているコードは以下のとおりで、ほぼ正しい出力が得られますが、行末 (または新しい行) を読み取っている配列に空のセルがあります。私が持っている分割を維持しながら、それら (\n\r) を除外する方法がわかりません。アドバイス?

try
{
    using (StreamReader reader = new StreamReader("file.txt"))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            string[] words = SplitWords(line.ToLower());
            foreach (string aString in words)
            {
                Console.WriteLine(aString);
            }
        }
    }
}
catch (Exception e)
{
    Console.WriteLine("The file could not be read:");
    Console.WriteLine(e.Message);
}
static string[] SplitWords(string lines)
{
    return Regex.Split(lines, @"[^-'a-zA-Z]");
}
4

2 に答える 2

1

少しのLinqでこれを行うことができます。これを使用して空の文字列を除外します。

static string[] SplitWords(string lines)
{
    return Regex.Split(lines, @"[^-'a-zA-Z]")
                .Where(s => s.Length > 0)
                .ToArray();
}

または、空白のみで構成される文字列を除外するには、次のようにします。

static string[] SplitWords(string lines)
{
    return Regex.Split(lines, @"[^-'a-zA-Z]")
                .Where(s => !s.All(Char.IsWhiteSpace))
                .ToArray();
}
于 2013-11-04T06:57:09.793 に答える
1

これを試して

return Regex.Split(lines, @"[^-'a-zA-Z]")
                              .Where(x=>!string.IsNullOrWhiteSpace(x)).ToArray();

IsNullOrWhiteSpaceと linq を使用して、一致する要素のみを新しい配列に抽出します

于 2013-11-04T06:57:26.943 に答える