java - string.replaceAll 切割字符 50% 的时间

标签 java jsp replaceall

我正在尝试使用一系列 string.replaceAlls 将文本文件中的所有 UTF-8 特殊字符替换为 ASCII 和 HTML 编码。一路走来,我遇到了一个特别顽固的问题:\uAC8B,UTF-8 中点。

这是将字符剪切掉一半的行:

  string_out = string_out.replaceAll("•", "·");

(“??” 是 UTF-8· 显示为扩展 ASCII 的方式。在遇到这一行之前,我尝试过“\uAC8B” 和许多其他编码,但没有成功。)

该行删除了 UTF-8 中点,但没有替换它,而且只替换了一半的情况。另一半时间它会错过角色,并保持不变。如果我制作它的多个副本或移动它周围的其他行,它甚至不会这样做。

这感觉像是一个多线程问题,但我不知道发生任何多线程。只是包含的 .jsp 文件中的一个从另一个 .jsp 运行的 ReplaceAlls block 。

什么可能导致这种类似竞争条件的行为?

最佳答案

AC8B不是一个点,而是一个汉字。您是说 00B7 吗?

Java 字符串始终为 UTF-16 Unicode。 UTF-8 是在文件中表示 Unicode 字符的一种方式,它不是 Java 字符串在内存中存储的方式。

注意读取输入和写入输出文件所使用的编码,它们应该是UTF-8,但是一旦文件内容被读入Java字符串,它就不再是UTF-8了,而是16 位 Unicode。

我认为你最好的机会是使用正确的 Unicode 转义,而不是尝试将 UTF-8 原始字节表示为 ASCII。

关于java - string.replaceAll 切割字符 50% 的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8732754/

相关文章:

java - 正则表达式允许; JAVA 中至少 5 位数字并修剪前导/尾随分号

java - 为什么这个 Java String.replaceAll() 代码不起作用?

java - 无法使用 Java 8 运行 Spring 4 和 Tomcat 8

java - JSP - 日期格式和谷歌缓存

java - 如何使用游标?

java - 通过数据数据库实现搜索字段

html - 单击 JSP 中的 Div 时调用 Servlet doPost 方法

Java 字符串 replaceAll()

java - System.out 编译器错误

java - 从 Java Jackson 的 JSON 输出中删除大括号和中括号?