【问题标题】:Shorter condition code of checking each character of a string in JavaJava中检查字符串每个字符的较短条件代码
【发布时间】:2015-02-04 06:26:20
【问题描述】:

这是我检查字符串中每个字符是否为元音的代码

if(word.charAt(i) == 'a' || word.charAt(i) == 'e' || word.charAt(i) == 'i' || word.charAt(i) == 'o' 
                    || word.charAt(i) == 'u')

我是否必须为 Java 中的每个元音重复 word.charAt(i) ?我在代码中重复了 5 次。在形成我的逻辑条件时,是否有更短的方法或者我是否会受到重复代码的支配?

【问题讨论】:

  • 您甚至不应该访问单个字符。详情见我的回答。
  • @laune 请参阅下面我对您的评论的回复。

标签: java string character


【解决方案1】:

我想到的一个简短的布尔测试类似于

"aeiou".contains(Character.toString(word.charAt(i)))

【讨论】:

  • 不需要在字符串和字符之间来回切换。更短的是:"aeiou".contains( word.substring(i, i+1) ),但您可以一举测试整个字符串...
  • @laune 如果 OP 想要计算元音的数量怎么办?如果 OP 想要确定整个 String 由元音组成,我同意你的正则表达式很好,但我在问题中看不到任何表明这一点。最后,使用Character.toString() 已经是一种优化(OP 的目标是更短的代码......我本可以使用更短的"aeiou".contains("" + word.charAt(i))丑陋)。跨度>
  • 也许我对英文的掌握不够,但我理解“检查字符串中的每个字符是否是元音”的意思是检查 all 是否是元音。现在已经接受了一个答案,如果有一个 single 元音,则返回 true,我将通过稍微更改正则表达式来修改我的答案...
  • @laune OP 在对您的回答的评论中指定我的 WAG 是正确的,他想计算元音。您的引用是正确的,但他再次想“测试每个字符是否是元音”(而不是 String 是否完全由元音组成)。
  • 是的,他正带着我们兜圈子。现在我添加了第三个变体:计数。
【解决方案2】:

创建一个函数并在任何地方使用它。

   public function isVowel(String word, int index){
    return "aeiou".contains(Character.toString(word.charAt(i)));
   }

称之为

 isVowel(word,i);

【讨论】:

    【解决方案3】:
    String vowel ="aeiou";
    
    if(vowel.contains(word.charAt(i)+"" ) )
    {
    
    }
    

    【讨论】:

      【解决方案4】:

      您甚至不应该访问单个字符:

      if( word.matches( "^[aeiou]+$" ) ){
          // all vowels
      }
      if( word.matches( ".*[aeiou].*" ) ){
          // one vowel
      }
      
      int count = word.length() - word.replaceAll("[aeiou]", "").length();
      // or
      int count = word.replaceAll("[^aeiou]", "").length();
      

      【讨论】:

      • 但我必须计算字符串中元音的数量。您的代码只是检查字符串是否与传递给 matches 方法的参数匹配。
      • @Nicholas 您的问题和您选择的答案都表明您需要计算。
      • @Nicholas 现在我也添加了计数。
      【解决方案5】:

      您可以使用 "aeiou".indexOf(word.charAt(i))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-08
        • 2020-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多