5
public class ReplaceVowels {

    public static void main(String args[]) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter the String:");
        String str = bf.readLine();

        char[] c = new char[str.length()];
        for (int i = 0; i < str.length(); i++) {

            if (c[i] == 'a' || c[i] == 'e' || c[i] == 'i' || c[i] == 'o'
                    || c[i] == 'u') {

                System.out.println(str.replace(c[i], '?'));

            }

        }

    }
}

str.replaceメソッドが機能しないのはなぜですか?機能させるにはどうすればよいですか?

4

5 に答える 5

12

コードでは、文字列と同じ長さの新しい文字配列を作成していますが、配列を値で初期化していません。

代わりに、次を試してください。

char[] c = str.toCharArray();

ただし、これはあなたがやろうとしていることを行う最善の方法ではありません。文字列内の文字を置き換えるために、文字配列や if ステートメントは必要ありません。

String str = bf.readLine();
str.replace( 'a', '?' );
str.replace( 'e', '?' );
str.replace( 'i', '?' );
str.replace( 'o', '?' );
str.replace( 'u', '?' );
System.out.println( str );

このreplace関数は、見つかった任意の (およびすべての) 文字を置換するか、その文字が文字列に存在しない場合は何もしません。

これらの 5 つの関数呼び出しを 1 つに短縮できるように、(edwga の回答で指摘されているように)正規表現の使用を検討することもできます。

str.replaceAll( "[aeiou]", "?" );
于 2012-08-04T17:07:26.070 に答える
5

正直なところ、このソリューションは比較的実用的ではありません。代わりにstr.replaceAll()メソッドを使用する必要があります。

(read in the String str);
str = str.replaceAll("[aeiou]", "?");
System.out.println(str);

これは、正規表現「[aeiou]」を使用して、特殊文字( "?")に置き換えます。正規表現は複雑なトピックですが、これは母音のすべてのインスタンスを検出するだけです。正規表現の詳細については、 http: //docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.htmlをご覧ください。

于 2012-08-04T17:09:34.317 に答える
1

上記の答えはすべて機能します。母音を大文字でキャプチャするために大文字と小文字の区別を追加するだけです(スキャナークラスを使用)

       String str1, str2;
       Scanner scan = new Scanner(System.in);

       System.out.print("Enter a String : ");
       str1 = scan.nextLine();
       str2 = str1.replaceAll("[aeiouAEIOU]", "?");
       // adding AEIOU to capture Vowels in uppercase.
       System.out.println("All Vowels Removed Successfully");

       System.out.println(str2);
于 2016-10-14T11:04:33.827 に答える