2011-10-05 73 views
4

想象我有一個String數組,像這樣:Java的比較字符字符串數組上

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,等於在同一行,我的意思是,像這樣:

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

問候,

favolas

回答

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的版本中,這將在編譯時被捕獲。

0

charString.charAt()返回的數據類型是原語而不是對象。因此,您可以使用==運算符執行比較,因爲它將比較值,而不是參考值。

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

當然可以!試試這個:

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

我們正在做一個基本的比較(字符到char),因此我們可以使用==而不是.equals()。請注意,這是區分大小寫的。

另一種選擇是使用.equals()

如果您使用的是Java的一個現代版本之前的焦炭顯式轉換爲字符串,您還可以使用增強的語法清晰的代碼,如所以:

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'); 
      } 

}