Java replace/replaceAll 奇怪的行为
Java replace/replaceAll strange behavior
我找不到我在这里缺少的东西。来自 java.lang.String
的 replace
和 replaceAll
都在每次出现后生成一个问号 (?):
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}?
这是执行的图像:
有人知道为什么吗?
已编辑:
仅作记录。问题是括号后确实有一个字符。
复制并粘贴到 Notepad++ 后,我可以看到 }?"
文本。不在 Netbeans 中。
如此纯粹的误解。
那是因为您的替换字符串中有问号。因此 replace
和 replaceAll
只是按照您告诉他们的方式去做。
我怀疑这是一个字符编码问题。当我将您的代码粘贴到 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.lang.String
的 replace
和 replaceAll
都在每次出现后生成一个问号 (?):
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}?
这是执行的图像:
有人知道为什么吗?
已编辑:
仅作记录。问题是括号后确实有一个字符。
复制并粘贴到 Notepad++ 后,我可以看到 }?"
文本。不在 Netbeans 中。
如此纯粹的误解。
那是因为您的替换字符串中有问号。因此 replace
和 replaceAll
只是按照您告诉他们的方式去做。
我怀疑这是一个字符编码问题。当我将您的代码粘贴到 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