2013-09-19 8 views
1

Мой код Java по какой-либо причине, которую я не могу понять, преобразует строку в шестнадцатеричный, когда мне нужен только конкретный символ, преобразованный в шестнадцатеричный на основе критериев. См. Приведенный ниже код и вывод.Строка Неверно преобразованная в шестнадцатеричный в 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

Строки считывание: aaddcc

Длина в символах составляет: 6

Закодированная ст. кольцо: 97971001009999

Длина в гольцов составляет: 14

Приведенный выше код является мясо его

+6

Это связано с знаком '+', который вызывает неявное преобразование из 'char' в' int', тогда 'int' преобразуется в десятичное число для String concat. – nhahtdh

+0

Если это не упражнение, используйте это: http://docs.oracle.com/javase/7/docs/api/java/net/URLEncoder.html – nhahtdh

+3

Nhahtdh объяснил ваши ошибки. Чтобы их решить, они меняют «закодированные + = + aChar;» на «закодированные + = aChar;» и «закодированы + = +» + »;» на «закодированные + =« + »;». В противном случае '+' будет отбрасывать 'char' в' int', которые возвращают позицию 'char' в таблице Unicode. – Pshemo

ответ

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 приведет к различным целым числам добавляются в зависимости от текущего символа.

Смежные вопросы