2012-08-22 92 views
0

所以這是我的代碼的一部分。如果我爲preTranslation字符串輸入了「1111」,它應該輸出true,但它打印出false。我猜測.equal()不能比較這兩個值,但我不知道另一種方式。任何幫助?字符串值和數組值之間的相等性

import javax.swing.JOptionPane; 
import java.util.Arrays; 

public class test3 
{ 
    public static void main (String [] args) 
    { 

    String s1 = "Morse"; 

    // Decide whether Morse code or English 
    String decide = JOptionPane.showInputDialog("Enter 'English' for Morse to English code translation and 'Morse' for English to Morse code translation. Pay attention to Caps."); 

    // Enter String & decide whether to convert to Morse or English 
    String preTranslation = JOptionPane.showInputDialog("Enter the words you wish to translate."); 

    if (decide.equals(s1)) 
     toMorse(preTranslation); 

    else 
     toEnglish(preTranslation); 
    } 

// Translate to Morse 
public static void toMorse(String preTrans) 
{ 
    // Initialize english letters 
    char[] english = new char[3]; 


    // Initialize english numbers 
    english[0] = 1; 
    english[1] = 2; 
    english[2] = 3; 

    // Initialize morse characters 
    String[] morse = {".","-", ".-"}; 

    // Replace spaces with | 
    String phraseWithDelimiter = preTrans.replace(" ", "|"); 

    String[] translation = new String[phraseWithDelimiter.length()]; 
    System.out.println(phraseWithDelimiter.substring(0, 1).equals(english[0])); // Should print out to be true 
    } 
} 
+0

只是一個評論在這裏,你爲什麼不做一個toLower()在「決定」字符串(和比較它(「莫爾斯」),所以你不必告訴用戶「注意帽子「,只是一個念頭! –

回答

2

你是一個字符(一個字符),這樣等於將始終返回false比較的String對象。如果您想從字符串中獲取單個字符,請使用charAt方法而不是子字符串。

0

使用String.valueOf(phraseWithDelimiter.substring(0,1))。equals(english [0]));

0

使用charAt以糾正字符比較:

phraseWithDelimiter.charAt(0) == english[0] 

您定義:

english[0] = 1; 

這是ASCII 1,不能由用戶輸入的字符。您需要定義:

english[0] = '1'; 
0

只是爲了闡述JamesB的答案,如果你想看看String類的equals方法的實現:

public boolean equals(Object anObject) { 
    if (this == anObject) { 
     return true; 
    } 
    if (anObject instanceof String) { 
     String anotherString = (String) anObject; 
     int n = value.length; 
     if (n == anotherString.value.length) { 
      char v1[] = value; 
      char v2[] = anotherString.value; 
      int i = 0; 
      while (n-- != 0) { 
       if (v1[i] != v2[i]) 
         return false; 
       i++; 
      } 
      return true; 
     } 
    } 
    return false; 
} 

你會發現,如果對象你'比較不是一個字符串(在你的例子中是一個字符)的實例,它立即返回false。 :)

相關問題