奇怪的字符转换,需要帮助澄清

Weird character conversion, need help clarifying

所以我正在编写一个程序,将数据从网页提取到 excel sheet,然后将其打印到文本注释中。但是,我遇到的一个奇怪的问题是,从excel sheet 到文本注释,一个字符发生了变化。 - 变成了? .我的解决方案是遍历这个词,当它到达?并将其更改为 - 。我试过使用我在网上找到的 unicode 并完成了

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

无济于事。有谁知道为什么要这样做?你能确认一下的 unicodes 吗?和 - 。所以如果这个词是 "Leo‑III 1.3" 现在是 "Leo?III 1.3" 谢谢你的帮助

replace in java 将字符作为第一个参数,并用第二个参数替换所有出现的地方。

你可以使用这个:

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

replaceAll 将第一个参数作为正则表达式,并用第二个参数替换所有匹配项。

注:\帮助转义?

此外,请务必将结果存储在新的字符串变量中,因为字符串是不可变的。

根据 Java 文档,String class 的 replace 方法采用原语 char 或实现 CharSequence 的对象(如 String ) 作为其参数。

如果要将 Leo?III 1.3 转换为 Leo-III 1.3,请使用:

.replace("?", "-")

? 是字符集编码问题的结果,可能出现在数据管道的许多地方。

实际上可能在字符串的打印中,字符串本身是有效的。

要找出实际的字符值是多少,请尝试 运行 此代码为字符串中找到的所有非 ASCII 字符打印 Unicode 转义码:

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);
}

测试(UTF-8 格式的源代码)

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

输出

\u00A9  ©
\u00BC  ¼
\u00E7  ç
\u00F1  ñ
\uFFFD  �