字符串在java中错误地转换为十六进制

时间:2013-09-19 02:28:51

标签: java string hex

我的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());

输出:

  

输入要进行网址编码的文本行

     

aaddcc

     

读取的字符串是:aaddcc

     

字符长度为:6

     

编码的字符串是:97971001009999

     

字符长度为:14

以上代码是它的核心

1 个答案:

答案 0 :(得分:0)

正如评论中所述,这是失败的原因是因为你尝试进行字符串连接的方式有一个小错误。加入两个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为正

以下两行是等效的

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

同样,当您使用aChar时,虽然转换为int会导致根据当前字符添加不同的整数。