【问题标题】:Check a string for consonants检查字符串的辅音
【发布时间】:2016-06-11 05:12:53
【问题描述】:

我想编写一个方法来检查string 中的辅音,使用.contains.indexOf

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

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

【问题讨论】:

    标签: java contains indexof


    【解决方案1】:

    我认为一个简单的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;
    }
    

    优化

    然后,您可以优化上述内容(以及直接针对您的问题),方法是在vowels 的提取常量String 上使用contains。类似的,

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

    【讨论】:

    • 包括所有字母,而不仅仅是辅音
    • @Maljam 哎呀。已编辑。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我看到你明确要求使用containsindexOf

      以防万一——如果你可以使用matches——这将很容易实现。

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

      【讨论】:

      • 谢谢,我认为匹配应该可以正常工作。但是你能告诉我 '.+' 是干什么用的吗?
      • 我只是在这里使用正则表达式来取消循环和条件。 '。'表示任何字符。 * -> 0 次或多次出现
      • 基本上这些辅音 - 可以在字符串中的任何位置。只要它们存在于字符串中,它就会返回 true
      • @vins - 这很好用!但是没有检查辅音的方法吗? string.substring(0,1).hasConsonant?
      • @vins - 我会问这个问题,但它会是重复的,所以......
      猜你喜欢
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 2023-03-27
      • 2017-10-21
      • 1970-01-01
      相关资源
      最近更新 更多