3

重複の可能性:
Javaで文字列を比較するにはどうすればよいですか?

私はJavaにかなり慣れていないので、2進数から10進数へのコンバーターを作成できたので、16進数から10進数へのコンバーターを作成しようとしています。

私が抱えている問題は、基本的に、文字列内の特定の文字を別の文字列と比較することです。これは、比較される現在の文字を定義する方法です。

String current = String.valueOf(hex.charAt(i));

これは私がキャラクターを比較しようとする方法です:

else if (current == "b") 
   dec += 10 * (int)Math.pow(16, power);

12などの数字だけを入力してコードを実行しようとすると機能しますが、「b」を使用しようとすると、奇妙なエラーが発生します。プログラムを実行した結果全体は次のとおりです。

run:
Hello! Please enter a hexadecimal number.
2b
For input string: "b" // this is the weird error I don't understand
BUILD SUCCESSFUL (total time: 1 second)

数値変換だけでプログラムを正常に実行する例を次に示します。

run:
Hello! Please enter a hexadecimal number.
22
22 in decimal: 34 // works fine
BUILD SUCCESSFUL (total time: 3 seconds)

これについての助けをいただければ幸いです、ありがとう。

編集:メソッド全体をここに置くと便利だと思います。

編集2:解決しました!誰が答えを受け入れるべきかわかりませんが、それらはすべてとても良くて役に立ちました。とても矛盾しました。

for (int i = hex.length() - 1; i >= 0; i--) {
        String lowercaseHex = hex.toLowerCase();
        char currentChar = lowercaseHex.charAt(i);

        // if numbers, multiply them by 16^current power
        if (currentChar == '0' || 
                currentChar == '1' || 
                currentChar == '2' || 
                currentChar == '3' || 
                currentChar == '4' || 
                currentChar == '5' || 
                currentChar == '6' || 
                currentChar == '7' || 
                currentChar == '8' || 
                currentChar == '9')
            // turn each number into a string then an integer, then multiply it by
            // 16 to the current power.
            dec += Integer.valueOf(String.valueOf((currentChar))) * (int)Math.pow(16, power);

        // check for letters and multiply their values by 16^current power
        else if (currentChar == 'a') 
            dec += 10 * (int)Math.pow(16, power);
        else if (currentChar == 'b') 
            dec += 11 * (int)Math.pow(16, power);
        else if (currentChar == 'c') 
            dec += 12 * (int)Math.pow(16, power);
        else if (currentChar == 'd') 
            dec += 13 * (int)Math.pow(16, power);
        else if (currentChar == 'e') 
            dec += 14 * (int)Math.pow(16, power);
        else if (currentChar == 'f') 
            dec += 15 * (int)Math.pow(16, power);
        else
            return 0;
        power++; // increment the power
    }

    return dec; // return decimal form
}
4

6 に答える 6

11

文字をcharによって返される値に初期化してみてくださいcharAt()

char current = hex.charAt(i);

次に、条件付きでリテラルcharを使用します。

else if (current == 'b') 

はプリミティブなので、演算子charを使用して比較できます。前のコードでは、 using==を比較していました。これは、aがであるため、コードは、メソッドと同じ値を持っているかどうかではなく、同じかどうかを確認しています。String==StringObjectObjectString.equals()

于 2013-02-05T10:54:06.087 に答える
1

完全なコードがなければ、特定することは困難ですが、通常、「入力文字列: xx の場合」の形式は、NumberFormatException に関連付けられたメッセージです。Integer.valueOf()、Integer.parseInt()、または同様のメソッドを偶然使用して、文字列 (の一部) を数値に変換していますか?

この場合、16 進数 (af) を受け入れるようにするには、基数の 2 番目のパラメーターを受け入れるメソッドを呼び出して、16 進数を渡すことを明示的に示す必要があります。たとえば、Integer.valueOf(文字列、16)。

また、他の人がすでに指摘したように、文字列を比較する正しい方法は equals メソッドを使用することです。これは、値 (コンテンツ) に関係なく、2 つの参照がまったく同じオブジェクトを指している場合にのみ == 演算子が true を返すためです。

于 2013-02-05T11:23:53.217 に答える
0

文字列をequalsメソッドと比較する必要があります

else if ("b".equals(current)) 

詳細については、 http: //www.javabeginner.com/learn-java/java-string-comparisonをご覧ください。

于 2013-02-05T10:54:10.267 に答える
0

文字列をcharに変更します。char current = hex.charAt(i);

次に、「b」と「B」をチェックする必要がある場合は、elseで

else if(current =='b' || current =='B'){}

于 2013-02-05T10:58:09.333 に答える
0

.equals()を使用して文字列を比較します。==を使用すると、両方が同じものを参照しているかどうかがチェックされると思います。

それがお役に立てば幸いです。:)

于 2013-02-05T10:58:40.940 に答える
0

実際には、それを行うための非常にシンプルでエレガントな方法があります。

int result = Integer.parseInt(hex, 16);
于 2013-02-05T12:34:01.337 に答える