В соревнованиях по программированию, где вы уверены, что число всегда будет действительным целым числом, вы можете написать собственный метод для синтаксического анализа.
private static int parseInt(String str) {
int i, n = 0;
for (i = 0; i < str.length(); i++) {
n *= 10;
n += str.charAt(i) - 48;
}
return n;
}
private static int parseInt(String str) {
int i=0, n=0, sign=1;
if(str.charAt(0) == '-') {
i=1;
sign=-1;
}
for(; i<str.length(); i++) {
n*=10;
n+=str.charAt(i)-48;
}
return sign*n;
}
str = str.trim()
. Поведение Java по умолчанию при чтении недопустимого символа юникода заключается в замене его на заменяющий символ (\ uFFFD). Этот символ часто отображается как знак вопроса.
В вашем случае текст, который вы читаете, не закодирован как unicode, он закодирован как что-то еще (Windows-1252 или ISO-8859-1, вероятно, наиболее распространенные альтернативы, если ваш текст на английском языке).
Вот отличная статья , написанная Джоэлом Спольским, по этой теме. Это не поможет вам решить вашу проблему, но это поможет вам понять, что происходит. Это также покажет вам, насколько это реально.
Вы уверены, какая кодировка вам нужна? Возможно, вам придется явно кодировать ваш вывод как UTF-8 или ISO 8859-1, если вы имеете дело с европейскими символами.
Я написал библиотеку с открытым исходным кодом, в которой есть утилита, которая преобразует любую последовательность String в Unicode и наоборот. Это помогает диагностировать такие проблемы. Так, например, чтобы напечатать свою строку, вы можете использовать что-то вроде этого:
String str= StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString("\\u0197" +
StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence("Test"));
Вы можете прочитать о библиотеке и где ее загрузить и как ее использовать в библиотеке Open Source Java со стеклом фильтрация трассировки, синтаксический анализ строк Unicode-конвертер и сравнение версий См. параграф «Конвертер строк Unicode»
У вас есть кодировка символов, которая не соответствует символу, который у вас есть, или поддерживаемым символам на экране.
Я бы проверил, какую кодировку вы используете, и попытайтесь определить, читаете ли вы , правильное сохранение или печать значения.