Java比较字符串数组上的char

时间:2011-10-05 17:26:33

标签: java

想象一下,我有一个像这样的String数组:

String[][] fruits = {{"Orange","1"}, {"Apple","2"}, {"Arancia","3"};

如果我这样做:

     for (int i = 0; i < fruits.length;i++){
         System.out.println(fruits[i][0].charAt(1));
            }

它会打印出来:

r
p
r

如果我这样做:

     for (int i = 0; i < fruits.length;i++){
         Character compare = fruits[i][0].charAt(1);
         System.out.println(compare.equals('r'));
            }

它会打印出来:

true
false
true

所以这是我的问题。是否可以在同一行使用charAt和equals,我的意思是,这样的事情:

System.out.println((fruits[i][0].charAt(1)).equals("r"));

此致

favolas

3 个答案:

答案 0 :(得分:7)

是的,前提是您先将charAt()的结果转换为Character

System.out.println(Character.valueOf(fruits[i][0].charAt(1)).equals('r'));

更简单的版本是写

System.out.println(fruits[i][0].charAt(1) == 'r');

我个人总是更喜欢后者。

您的版本不起作用的原因是charAt()返回char(而不是Character),而char是原始类型,没有{ {1}}方法。

代码中的另一个错误是在equals()中使用双引号。遗憾的是,这个会编译并可能导致痛苦的调试会话。使用上面基于equals("r")的版本,这将在编译时捕获。

答案 1 :(得分:4)

当然!试试这个:

System.out.println((fruits[i][0].charAt(1)) == 'r');

我们正在进行原始比较(char到char),因此我们可以使用==而不是.equals()。请注意,这是区分大小写的。

另一种选择是在使用.equals()

之前将char显式地转换为String

如果您使用的是现代版本的Java,您还可以使用增强的for语法来实现更清晰的代码,如下所示:

public static void main(String[] args) {
    String[][] fruits = {{"Orange","1"}, {"Apple","2"}, {"Arancia","3"}};
    for (String[] fruit: fruits){
        System.out.println((fruit[0].charAt(1)) == 'r');
            }

}

答案 2 :(得分:0)

char返回的String.charAt()数据类型是基元,而不是对象。因此,您可以使用==运算符来执行比较,因为它将比较值,而不是参考值。

System.out.println((fruits[i][0].charAt(1) == 'r'));