1

文字列の配列でいくつかの文字を他の文字に置き換えたい単純なプログラムを作成しました。いくつかの単語を含む文字列の配列を作成しました。各単語をループして、含まれている場合はいくつかの文字をチェックしたいのですが、私は何も起こりませんここに私のコードを置き換えようとしました

            string x = "";
            x = "Script friends above about type=text/javascript>BBC.adverts.writeleaderboardtrue) all </script>friends,eating,khaled,khaled,khaled";
 char[] delimiterChars = { ' ', ',', '.', ':', '\t', ':', '$', '=', ';', '<', '>', '!', ';', ']', '[', '"',
                                    '/','=','-','?'};
 string[] words = x.Split(delimiterChars);
            for (int j = 0; j < words.Length; j++)
            {
                words[j] = words[j].ToLower();
            }
 for (int i = 0; i < words.Length; i++)
            {
                for (int j = 0; j < words[j].Length; j++)
                {

                    if (words[i][j]=='a'||words[i][j]=='e'||words[i][j]=='i'||words[i][j]=='o'||words[i][j]=='u'
                        ||words[i][j]=='h'||words[i][j]=='w'||words[i][j]=='y')
                    {
                        words[i].Replace(words[i][j],'0');
                    }
                    else if (words[i][j] == 'b' || words[i][j] == 'f' || words[i][j] == 'p' || words[i][j] == 'v')
                    {
                        words[i].Replace(words[i][j], '1');
                    }

                     else if (words[i][j] == 'c' || words[i][j] == 'g' || words[i][j] == 'j' || words[i][j] == 'k'
                    || words[i][j] == 'q' || words[i][j] == 's' || words[i][j] == 'x' || words[i][j] == 'z')
                {
                    char xx = words[i][j];
                    words[i].Replace(xx, '2');
                    Console.WriteLine(words[i]);
                }
                else if (words[i][j] == 'd' || words[i][j] == 't')
                {
                    words[i].Replace(words[i][j], '3');
                }
                else if (words[i][j] == 'l')
                {
                    words[i].Replace(words[i][j], '4');
                }
                else if (words[i][j] == 'm' || words[i][j] == 'n')
                {
                    words[i].Replace(words[i][j], '5');
                }
                else if (words[i][j] == 'r')
                {
                    words[i].Replace(words[i][j], '6');
                }



}
}
4

3 に答える 3

3

文字列が不変であることを忘れています。

words[i].Replace(words[i][j], '1')値が置き換えられた新しい String インスタンスを返します。

新しく生成された String オブジェクトに参照を割り当てる必要があります。

words[i] = words[i].Replace(words[i][j], '1');
于 2012-05-22T23:11:56.863 に答える
2

この.Replace操作は元の文字列を変更しません。変更を適用するには、結果をソース変数に戻す必要があります。

words[i] = words[i].Replace(words[i][j], '0');

areplace は文字列全体に適用されるため、e、 などを文字ごとに検索して replace を呼び出すのは冗長であることに注意してください。これを行うことができます:

words[i] = words[i].Replace('a', '0');
words[i] = words[i].Replace('e', '0');
// etc..

またはさらに良いことに、正規表現を使用します。

words[i] = Regex.Replace(words[i], "[aeiouhwy]", "0");
words[i] = Regex.Replace(words[i], "[bfvp]", "1");
于 2012-05-22T23:12:04.000 に答える
1

Regex.Replaceを使用して、同じものをよりコンパクトで効率的な方法で一致させることができます。つまり、これ:

            for (int j = 0; j < words[j].Length; j++)
            {

                if (words[i][j]=='a'||words[i][j]=='e'||words[i][j]=='i'||words[i][j]=='o'||words[i][j]=='u'
                    ||words[i][j]=='h'||words[i][j]=='w'||words[i][j]=='y')
                {
                    words[i].Replace(words[i][j],'0');
                }

次のような単純な正規表現置換に置き換えることができます。

  Regex re0 = new Regex("[aeiouhwy]"); // match any of this chras
  string changedWord = re0.Replace(word,"0");

Replace次のようにメソッドへの呼び出しをチェーンすることもできます。

  Regex re0 = new Regex("[aeiouhwy]"); // match any of this chras
  Regex re1 = new Regex("[bfpv]");
  string changedWord = re0.Replace(word,"0");
  changedWord = re1.Replace(changedWord,"1")

等々。書きやすく、理解しやすく、効率的です。

于 2012-05-23T01:43:43.413 に答える