Java比较字符串数组中的字符

4

假设我有一个像这样的字符串数组:

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"));

Regards,

favolas

3个回答

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是一个原始类型,没有equals()方法。

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


4

Certainly! Try this:

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

我们正在进行原始比较(char to 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');
            }

}

0

char 数据类型是从 String.charAt() 返回的原始数据类型,而不是对象。因此,您可以使用 == 运算符执行比较,它将比较值而不是引用。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接