gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:09:39 24 4
gpt4 key购买 nike

我正在尝试使用一系列 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com