0

つまり、これは私のコードの一部です。preTranslation文字列に「1111」と入力すると、trueと出力されますが、falseと出力されます。.equal()は2つの値を比較できないと思いますが、別の方法はわかりません。何か助けはありますか?

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
    }
}
4

4 に答える 4

2

Stringオブジェクトを文字(char)と比較しているため、equalsは常にfalseを返します。文字列から単一の文字を取得する場合は、部分文字列の代わりにcharAtメソッドを使用します。

于 2012-08-22T23:08:46.587 に答える
0

String.valueOf (phraseWithDelimiter.substring(0、1))。equals(english [0]));を使用します。

于 2012-08-22T23:12:09.360 に答える
0

charAt文字比較を修正するために使用する:

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

あなたが定義する:

english[0] = 1;

これはASCII1で、ユーザーが入力できない文字です。以下を定義する必要があります。

english[0] = '1';
于 2012-08-22T23:18:55.523 に答える
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が返されることに気付くでしょう。:)

于 2012-08-22T23:19:42.767 に答える