2012-08-22 48 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。 :)

相关问题