Java 替换/替换所有奇怪的行为

标签 java string replaceall

我无法在这里得到我所缺少的东西。 java.lang.String 中的 replacereplaceAll 在每次出现后都会生成一个问号 (?):

        String str = "ABCD DKABCED DLS ABC";        
        System.out.println("str='"+str+"'");
        System.out.println("str.replaceAll(\"ABC\", \"A\\\\${BC}​\" ) => " + str.replaceAll("ABC", "A\\${BC}​" ));
        System.out.println("str.replace(\"ABC\", \"A${BC}​\" ) => " + str.replace("ABC", "A${BC}​" ));

生成以下输出:

str='ABCD DKABCED DLS ABC'
str.replaceAll("ABC", "A\\${BC}?" ) => A${BC}?D DKA${BC}?ED DLS A${BC}?
str.replace("ABC", "A${BC}?" ) => A${BC}?D DKA${BC}?ED DLS A${BC}?

这里是执行的图像: enter image description here

有人知道为什么吗?

编辑:

仅供记录。问题是括号后面确实有一个字符。 复制并粘贴到 Notepad++ 后,我可以看到 }?" 文本。在 Netbeans 中没有。 所以纯粹是在转述误解。

最佳答案

我怀疑这是一个字符编码问题。当我将您的代码粘贴到 Eclipse(在 Windows 上)中时,它无法保存代码,并提示字符集:

Some characters cannot be mapped using "Cp1252" character encoding.

当我从头开始重新输入时,问题就消失了:

String str = "ABCD DKABCED DLS ABC";
System.out.println("str='" + str + "'");
System.out.println(str.replace("ABC", "A${BC}"));

产生以下内容(没有额外的?标记):

str='ABCD DKABCED DLS ABC'
A${BC}D DKA${BC}ED DLS A${BC}

如果您选择hexdump正常 } 的结果是 7d

但是对于代码中的 } 字符,我得到 7d e2 80 8b

关于Java 替换/替换所有奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28572650/

相关文章:

Java:替换所有 ' in a string with\'

java - 编舞问题

java - 小程序-浏览器不显示Java小程序

java - EHCache中的EH代表什么?

c# - 下面的代码创建了多少个字符串对象?

Java 正则表达式匹配未按预期工作

java - 如何从打印列表中删除不需要的项目?

python - 如何在列表理解中将变量名称提取为字符串?

c - 顺序搜索在 C 中不起作用

java - 如何阻止replaceAll在循环中不断替换