【问题标题】:Ignoring uppercase and lowercase on char when comparing比较时忽略char上的大写和小写
【发布时间】:2014-11-25 08:27:25
【问题描述】:

这样做的目的是从用户那里得到一个句子并确定每个元音出现了多少。除了我不确定如何忽略大写和小写字母但我猜是 equalsIgnoreCase 或 toUpperCase ()。

我还想知道是否有其他方法可以使用StringStringBuilderCharacter 的其他类来执行此操作。我对编程还是很陌生,这一章让我很生气。

    int counterA=0,counterE=0,counterI=0,counterO=0,counterU=0;
    String sentence=JOptionPane.showInputDialog("Enter a sentence for vowel count");        

    for(int i=0;i<sentence.length();i++){
        if(sentence.charAt(i)=='a'){
            counterA++;}
        else if(sentence.charAt(i)=='e'){
            counterE++;}
        else if(sentence.charAt(i)=='i'){
            counterI++;}
        else if(sentence.charAt(i)=='o'){
            counterO++;}
        else if(sentence.charAt(i)=='u'){
            counterU++;}
        }   
    String message= String.format("The count for each vowel is \nA:%d\nE:%d\nI:%d\nO:%d\nU:%d",
            counterA,counterE,counterI,counterO,counterU);  
    JOptionPane.showMessageDialog(null, message);
}

}

代码在这里

【问题讨论】:

  • if (theChar == 'a' || theChar == 'A')?
  • Character.toLowerCase(sentence.charAt(i))=='a')

标签: java string char


【解决方案1】:

由于您是在原始字符上进行比较,

Character.toLowerCase(sentence.charAt(i))=='a'      
Character.toUpperCase(sentence.charAt(i))=='A' 

应该已经是您在 Java 中的最佳方式了。

但是如果你在 Stirng 上进行比较

 sentence.substring(i,i+1).equalsIgnoreCase("a")

会更直接,但有点难以阅读。

如果数组或列表中有 String 类型,则调用

s.equalsIgnoreCase("a") 

会好很多。请注意,您现在是在与“a”而不是“a”进行比较。

如果你使用StringBuilder/StringBuffer,你可以调用toString(),然后使用同样的方法。

sb.toString().substring(i,i+1).equalsIgnoreCase("a");

【讨论】:

  • 欢迎您的信息!我还想知道“indexOf”是否可以做到这一点?那是我的第一次尝试,但我失败了。
  • @ben,不。它只返回此字符串中第一次出现指定字符的 index。 indexOf(int ch) 的参数是一个字符,而不是一个索引。并且返回值是一个索引。
  • 所以不可能使用 for 循环,因为它总是返回第一次出现并且不会遍历字符串的其余部分?抱歉,我保证最后一个问题!
  • @ben,当然可以,这要看你怎么对String进行操作了,比如第一个循环,indexOf返回4,那么你可以记住这个索引调用soFar,下一个循环,您可以调用 (string.subString(soFar,s.length)).indexOf(...)。像这样的东西,这取决于你想要什么以及你怎么做。但始终,我们应该选择最易读、最简单的方式。
【解决方案2】:

equalsIgnoreCase 或 toUpperCase() 方法是最好(也是最简单)的选择。

【讨论】:

  • 解决方案,@Jaskey 提供的也可以。您可以将整个句子转换为大写(或小写)并逐个字符进行比较。另一种选择是逐个字符转换为大写(或小写),然后进行比较。
【解决方案3】:

使用equalsIgnoreCase 看起来比在比较之前将两个字符串都转换为uppercase 更具可读性。可读性胜过微优化。

下面看起来更易读

if (myString.toUpperCase().equals(myAnotherString.toUpperCase())) {

if (myString.equalsIgnoreCase(myAnotherString))

【讨论】:

    猜你喜欢
    • 2010-11-07
    • 2016-01-29
    • 2010-11-26
    • 2014-10-30
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    相关资源
    最近更新 更多