1

基準に基づいて特定の文字のみを 16 進数に変換する必要がある場合に、文字列を 16 進数に変換する理由がわからないという理由で、私の Java コード。以下のコードと出力を参照してください。

for (int n = 0; n < line.length(); ++n) {
    char aChar = line.charAt(n);
    if (Character.isLetter(aChar) || Character.isDigit(aChar)
            || aChar == '_' || aChar == '-' || aChar == '.'
            || aChar == '*') {
        encoded += +aChar;
    } else if (aChar == ' ') {
        encoded += +'+';
    } else {
        String hexValue = Integer.toHexString(aChar);
        encoded += '%' + hexValue;
    }
}

System.out.println("The encoded string is: " + encoded);

System.out.println("Length in chars is: " + encoded.length());

出力:

URL エンコードするテキスト行を入力してください

aaddcc

読み取られる文字列は次のとおりです。

文字の長さ: 6

エンコードされた文字列は次のとおりです: 97971001009999

文字の長さ: 14

上記のコードはそれの肉です

4

1 に答える 1

0

コメントで概説されているように、これが失敗する理由は、文字列連結を実行しようとしている方法に小さなエラーがあるためです。2 つのオブジェクトを結合する正しい方法Stringは、次の例のようになります。

"Hello " + "World"; //Adding two String constants
"1st String" + stringVariable; //Appending a String variable to a String constant
firstString + secondString; //Concatenating two String variables
"Favourite letter: " + 'a'; //Join a String and a char
"Age: " + 21; //Join a String and an int - result is "Age: 21"

使用+=している はショートカットですが、x += y基本的には に展開されx = x + yます。これを書く場所はencoded += + '+'に展開されencoded = encoded + + '+'ます。charこれは- 型の変数には意味がありませんが、charが に変換された場合int、コンパイラは式を として解釈できますencoded + (+43)。ここで、43 は'+'文字をにキャストした結果int(つまり(int)'+') であり(+43)、不必要に正確な方法です。それ43が肯定的であると述べること。

次の 2 行は同等です

encoded += +'+';
encoded += 43;

を使用する場合も同様ですaCharが、にキャストするintと、現在の文字に応じて異なる整数が追加されます。

于 2014-03-15T10:18:17.780 に答える