2012-08-22 5 views
0

이것은 내 코드의 일부입니다. preTranslation String에 "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()를 사용하고 ("morse"와 비교하여) 사용자에게 "주의를 기울이지 마십시오."라고 말할 필요가 없습니다. Caps ". 그냥 생각! –

답변

2

String 객체와 문자 (char)를 비교하면 equals은 항상 false를 반환합니다. 문자열에서 단일 문자를 가져 오려면 하위 문자열 대신 charAt 메서드를 사용하십시오.

0

사용 String.valueOf (phraseWithDelimiter.substring (0, 1)). equals (영어 [0]));

0

문자 비교를 수정하기 위해 charAt 사용 :

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

당신은 정의 ASCII 1, 사용자가 입력 할 수없는 문자

english[0] = 1; 

이다.

english[0] = '1'; 
0

당신이 String 클래스의 equals 메소드의 구현을 보면한다면 그냥 JamesB의 대답에 정교 : 당신은 정의 할 필요가

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를 반환합니다. :)

관련 문제