想象一下,我有一个像这样的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
答案 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'));