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

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 方法不起作用?我应该怎么做才能让它起作用?

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 函数会替换它找到的任何(并且所有)字符,或者如果字符串中不存在该字符,则不执行任何操作。

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

str.replaceAll( "[aeiou]", "?" );

2
字符串是不可变的,str.replace 不会修改原始字符串,它将返回一个具有修改内容的新/单独字符串。你可能想要使用 str = str.replace(...) - Pshemo

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上了解更多关于正则表达式的知识。

4
你可以在正则表达式中添加 (?i) 来使其不区分大小写,例如 "(?i)[aeiou]" - Pshemo

2

以下是一种将字符串中所有元音替换为“X”的方法。 (?i)用于忽略大小写。

String str = "hEllo";
str = str.replaceAll( "(?i)[aeiou]", "X" );

也可以更明确地说明类似以下情况:

String str = "hEllo";
str = str.replaceAll( "[aeiouAEIOU]", "X" );

1
所有上述答案都有效。只需添加一些大小写敏感性即可捕获大写字母中的元音(使用Scanner类)。
       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);

0
/***
 * Replace all vowels in an input string with
 * the corresponding numbers replace with 1,2,3,4,5
 * @author Kishore Diyyana
 */
public class ReplaceVowels {
    public static void main(String args[]) {
        ReplaceVowels rv = new ReplaceVowels();
        System.out.println(rv.replaceVowels("Kishore Babu Diyyana"));
    }
    public String replaceVowels(String inputStr) {
        return inputStr.replaceAll("[aA]","1").
                        replaceAll("[eE]","2").
                        replaceAll("[iI]","3").
                        replaceAll("[oO]","4").
                        replaceAll("[uU]","5");
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接