如何从单词中删除元音并打印出来?

时间:2015-10-14 02:19:44

标签: java

我试图编写一个程序,要求某人输入一个单词然后程序删除单词中的任何元音并打印剩余的辅音。这就是我到目前为止所做的:

package r7;

import java.util.Scanner;

public class Disemvowel {
    public static void main(String[] args) {
        Scanner stdin = new Scanner(System.in);
        System.out.println("Please enter a word");
        String word = stdin.next();
        String disemvowlmentWord = "";
        int len = word.length();

        for (int i=0; i<len; i++) {
            char c = word.charAt(i);
            if (c != 'a' | c != 'e' | c != 'i' | c != 'o' | c != 'u')
                disemvowlmentWord = disemvowlmentWord + c;
        }
        System.out.println(disemvowlmentWord);
    }
}

当我运行它时,它只会重新打印我输入的任何单词。

2 个答案:

答案 0 :(得分:7)

你使用了bitwise或(但每个元音都不是任何其他元音),我想你想要一个逻辑和。此

if (c != 'a' | c != 'e' | c != 'i' | c != 'o' | c != 'u')

应该是

if (c != 'a' && c != 'e' && c != 'i' && c != 'o' && c != 'u')

您还可以使用for-each loop,我希望StringBuilder而不是创建多个不可变String(s)。像,

StringBuilder sb = new StringBuilder();
for (char c : word.toCharArray()) {
    if (c != 'a' && c != 'e' && c != 'i' && c != 'o' && c != 'u') {
        sb.append(c);
    }
}
System.out.println(sb);

最后,上述测试也可以表达(因为De Morgan's laws),如

if (!(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'))

您可以使用正则表达式替换空String的元音。像,

System.out.println(word.replaceAll("[a|e|i|o|u]", ""));

答案 1 :(得分:-3)

您使用的操作符错误。使用&amp;&amp;而不是|