3

String[]文字列内の各単語のに変換する必要がある文字列があります。ただし、単語に含まれるハイフンとアポストロフィを除いて、空白や句読点は必要ありません。

入力例:

Hello! This is a test and it's a short-er 1. - [ ] { } ___)

入力から作成された配列の例:

[ "Hello", "this", "is", "a", "test", "and", "it's", "a", "short-er", "1" ]

現在、これは私が試したコードです

(注:2番目は、string.First()が呼び出されたときにプログラムの後半でエラーになります):

private string[] ConvertWordsFromFile(String NewFileText)
{
     char[] delimiterChars = { ' ', ',', '.', ':', '/', '|', '<', '>', '/', '@', '#', '$', '%', '^', '&', '*', '"', '(', ')', ';' };
     string[] words = NewFileText.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries);
     return words;
}

また

private string[] ConvertWordsFromFile(String NewFileText)
{     
    return Regex.Split(NewFileText, @"\W+");
}

2番目の例は次のコードでクラッシュします

private string GroupWordsByFirstLetter(List<String> words)
{
    var groups =
        from w in words
        group w by w.First();
    return FormatGroupsByAlphabet(groups);
}

具体的には、w.First()が呼び出されたとき。

4

4 に答える 4

4

文字列から不要な文字を削除するには

string randomString = "thi$ is h@ving s*me inva!id ch@rs";
string excpList ="$@*!";

LINQオプション1

var chRemoved = randomString
                  .Select(ch => excpList.Contains(ch) ? (char?)null : ch);

var Result = string.Concat(chRemoved.ToArray());    

LINQオプション2

var Result = randomString.Split().Select(x => x.Except(excList.ToArray()))
                                      .Select(c => new string(c.ToArray()))
                                      .ToArray();
于 2012-11-12T03:06:32.167 に答える
1

これが私が作り上げたちょっとしたことです。分割して\n、不要な文字を削除します。

    private string ValidChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789'-";
    private IEnumerable<string> SplitRemoveInvalid(string input)
    {
        string tmp = "";
        foreach(char c in input)
        {
            if(c == '\n')
            {
                if(!String.IsNullOrEmpty(tmp))
                {
                    yield return tmp;
                    tmp = "";
                }
                continue;
            }
            if(ValidChars.Contains(c))
            {
                tmp += tmp;
            }
        }
        if (!String.IsNullOrEmpty(tmp)) yield return tmp;
    }

使用法は次のようになります。

    string[] array = SplitRemoveInvalid("Hello! This is a test and it's a short-er 1. - [ ] { } _)")
                     .ToArray();

私は実際にそれをテストしませんでしたが、それは動作するはずです。そうでない場合は、修正するのは簡単です。

于 2012-11-12T03:02:25.357 に答える
0

string.Split(char [])を使用します

string strings = "4,6,8\n9,4";
string [] split = strings .Split(new Char [] {',' , '\n' });

また

不要な空のアイテムがあれば、以下を試してください。String.Splitメソッド(String []、StringSplitOptions)

string [] split = strings .Split(new Char [] {',' , '\n' }, 
                                 StringSplitOptions.RemoveEmptyEntries);
于 2012-11-12T02:53:57.490 に答える
0

これは、単語を照合することにより、正規表現を使用して非常に簡単に実行できます。次の正規表現を使用しています。これにより、単語の途中でハイフンとアポストロフィを使用できますが、単語の境界で発生した場合は削除されます。

\w(?:[\w'-]*\w)?

ここで実際の動作を確認してください。

C#では、次のようになります。

private string[] ConvertWordsFromFile(String NewFileText)
{
     return (from m in new Regex(@"\w(?:[\w'-]*\w)?").Matches(NewFileText)
             select m.Value).ToArray();
}

LINQを使用して、MatchCollectionによって返された単語の配列を取得していMatchesます。

于 2015-05-31T22:01:52.793 に答える