检查字符串中的辅音

Check a string for consonants

我想编写一个方法来使用 .contains.indexOf 检查 string 是否存在 辅音

我想我可以做很长的路要走,检查字母表中的每个 辅音,但我知道有更好的方法。这是我到目前为止所拥有的,但就像我说的那样,我认为这是很长的路要走。

   public boolean containsConsonant(String searchString) {
        if(searchString.contains("b") || searchString.contains("c")){
            return true;
        }

我认为这里一个简单的 for 循环是最可读的,您可以使用布尔与测试字符是否在所需范围内。您可以使用 or 测试来跳过元音。像,

public boolean containsConsonant(String searchString) {
    if (searchString == null) {
        return false;
    }
    for (char ch : searchString.toCharArray()) {
        char lower = Character.toLowerCase(ch);
        if (lower >= 'a' && lower <= 'z') {
            if (lower == 'a' || lower == 'e' || lower == 'i' || 
                    lower == 'o' || lower == 'u') continue;
            return true;
        }
    }
    return false;
}

优化

然后您可以优化上面的内容(并且直接您的问题)通过在提取的常量上使用containsStringvowels。像,

private static final String vowels = "aeiou";
public static boolean containsConsonant(final String searchString) {
    if (searchString == null) {
        return false;
    }
    for (char ch : searchString.toCharArray()) {
        char lower = Character.toLowerCase(ch);
        if (lower >= 'a' && lower <= 'z' && !vowels.contains(String.valueOf(lower))) {
            return true;
        }
    }
    return false;
}

你可以创建一个包含所有辅音的数组,然后 运行 使用循环创建它 例如

String[] consonants{"b", "c",....}
boolean containsConsonants(String searchString, String[]arr){
for (String consonant: arr){
    if(searchString.contains(str)){ return true} return False

我看到您明确要求使用 containsindexOf

以防万一 - 如果您可以使用 matches - 实施起来会非常容易。

public boolean containsConsonant(String searchString){
    String consonants = ".*[bcdfghj].*";  //list the characters to be checked
    return searchString.matches(consonants);
}