因此,我正在编写一个程序,该程序将从网页中提取的数据提取到Excel工作表中,然后将其打印到文本注释中。但是,我遇到的一个奇怪的问题是,从excel工作表到文本注释,字符已更改。 -已经变成了? 。我的解决方案是遍历单词以及何时到达?并将其更改为-。我尝试使用在网上找到的unicode并完成
.replace("(question mark unicode) ", " - ")
无济于事。有谁知道为什么要这么做吗?您可以确认的unicode吗?和-。因此,如果单词是“ Leo‑III 1.3”,则现在是“ Leo?III 1.3”。谢谢您的帮助
答案 0 :(得分:1)
在Java中的替换将字符作为第一个参数,并将所有出现的内容替换为第二个参数。
您可以宁愿使用它:
ParquetDatasetPiece
replaceAll将第一个参数作为正则表达式,并用第二个参数替换所有匹配项。
注意:\帮助逃脱?
另外,由于字符串是不可变的,请确保将结果存储在新的String变量中。
答案 1 :(得分:1)
根据Java文档,String类的replace
方法采用原始的char
或实现CharSequence
的对象(如String)作为其参数。
如果要将Leo?III 1.3转换为Leo-III 1.3,请使用:
.replace("?", "-")
答案 2 :(得分:1)
?
是字符集编码问题的结果,并且可能发生在数据管道的许多地方。
它实际上可能是在字符串的打印中,并且字符串本身是有效的。
要了解实际的字符值是什么,请尝试运行以下代码以打印字符串中找到的所有非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 �