如何用Java中的特殊字符替换替换元音?

kei*_*ith 4 java

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], '?'));

            }

        }

    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这个str.replace方法不起作用?我该怎么做才能让它发挥作用?

Jam*_*mie 11

在您的代码中,您将创建一个新的字符数组,其长度与字符串相同,但您不会使用任何值初始化数组.

相反,尝试:

char[] c = str.toCharArray();
Run Code Online (Sandbox Code Playgroud)

但是,这不是做你想做的事情的最佳方式.您不需要字符数组或if语句来替换字符串中的字符:

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

replace函数将替换它找到的任何(和所有)字符,或者如果字符串中不存在该字符,它将不执行任何操作.

您可能还想研究使用正则表达式(如edwga的答案中所指出的),以便您可以将这5个函数调用缩短为一个:

str.replaceAll( "[aeiou]", "?" );
Run Code Online (Sandbox Code Playgroud)

  • 字符串是不可变的,`str.replace` 不会修改原始字符串,它会返回一个新的/单独的带有修改内容的字符串。你可能指的是`str = str.replace(...)`。 (2认同)

小智 5

老实说,这种解决方案相对不切实际.您应该使用str.replaceAll()方法.

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

它的作用是使用正则表达式"[aeiou]"并用特殊字符("?")替换它.正则表达式是一个复杂的主题,但这只是检测元音的每个实例.您可以在http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html上阅读有关Regex的更多信息.

  • 你还可以在正则表达式中添加`(?i)`以使其*不区分大小写*就像``(?i)[aeiou]"` (4认同)