Странное преобразование символов, нужна помощь в уточнении - PullRequest
0 голосов
/ 30 ноября 2018

Итак, я пишу программу, которая берет данные, извлеченные на лист Excel с веб-страницы, а затем распечатывает их в текстовую заметку.Однако странная проблема, с которой я столкнулся, заключается в том, что от листа Excel до текстовой заметки символ изменился.- превратился в?,Мое решение состояло в том, чтобы перебрать слово и когда оно доходит до?и измените его на -.Я попытался использовать юникоды, которые я нашел в Интернете, и сделал

.replace("(question mark unicode) ", " - ") 

безрезультатно.Кто-нибудь знает, почему он это делает?и вы можете подтвердить Unicodes для?а также - .Так что, если слово было «Leo-III 1.3», то теперь это «Leo? III 1.3». Спасибо за любую помощь

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Согласно Java-документам, метод replace класса String принимает в качестве параметров либо примитив char, либо объект, реализующий CharSequence (например, String).

Если вы хотите преобразовать Leo?III 1.3 до Leo-III 1.3, используйте:

.replace("?", "-")

0 голосов
/ 30 ноября 2018

? является результатом проблем с кодировкой набора символов и может возникать во многих местах в конвейере данных.

Это может быть при печати строки, а сама строка является допустимой.

Чтобы узнать, каково действительное значение символа, попробуйте запустить этот код, чтобы напечатать escape-код Unicode для всех символов, не входящих в ASCII, найденных в строке:

public static void printNonAscii(String s) {
    TreeSet<Character> nonAscii = new TreeSet<>();
    for (char ch : s.replaceAll("[\r\n\\x20-\\x7E]", "").toCharArray())
        nonAscii.add(ch);
    for (char ch : nonAscii)
        System.out.printf("\\u%04X  %s%n", (int) ch, ch);
}

Test(источник в UTF-8)

printNonAscii("Foo ? \uFFFD ç ñ © ¼");

Выход

\u00A9  ©
\u00BC  ¼
\u00E7  ç
\u00F1  ñ
\uFFFD  �
0 голосов
/ 30 ноября 2018

replace в java принимает символ в качестве первого аргумента и заменяет все вхождения вторым аргументом.

вы можете использовать это:

String newStr = str.replaceAll("\\?", "-");

replaceAll принимает 1-й аргумент в качестве регулярного выраженияи заменяет все совпадения на 2-й аргумент.

Примечание: \ help escape?

также обязательно сохраните результат в новой строковой переменной в виде строкинеизменны.

...