【问题标题】:How to replace replace vowels with a special character in Java?如何用Java中的特殊字符替换替换元音?
【发布时间】:2012-08-04 17:03:32
【问题描述】:
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 方法不起作用?我应该怎么做才能让它发挥作用?

【问题讨论】:

    标签: java


    【解决方案1】:

    在您的代码中,您正在创建一个新的字符数组,其长度与您的字符串相同,但您没有使用任何值初始化该数组。

    请尝试:

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

    您可能还想考虑使用 regular expressions(正如 edwga 的回答中所指出的那样),以便您可以将这 5 个函数调用缩短为一个:

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

    【讨论】:

    • 字符串是不可变的,str.replace 不会修改原始字符串,它会返回新的/单独的一个修改过的内容。你的意思可能是str = str.replace(...)
    【解决方案2】:

    老实说,这种解决方案相对不切实际。您应该改用 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阅读更多关于正则表达式的信息

    【讨论】:

    • 您也可以在正则表达式中添加(?i),使其不区分大小写,如"(?i)[aeiou]"
    【解决方案3】:

    这是用“X”替换字符串中所有元音的一种方法。 (?i) 是让它不区分大小写。

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

    也可以更明确地使用以下情况:

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

    【讨论】:

      【解决方案4】:

      以上所有答案都有效。 只需添加一些区分大小写以捕获大写元音(使用扫描器类)

             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);
      

      【讨论】:

        【解决方案5】:
        /***
         * 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");
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2011-05-08
          • 1970-01-01
          • 1970-01-01
          • 2021-09-20
          • 1970-01-01
          • 2019-09-23
          • 2011-12-28
          相关资源
          最近更新 更多