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

时间:2015-02-17 22:48:15

标签: java string replaceall

我无法得到我在这里失踪的东西。来自replace的{​​{1}}和replaceAll都会在每次发生后生成问号(?):

java.lang.String

生成以下输出:

        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}​" ));

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

有人知道为什么吗?

编辑:

仅供记录。在括号后面确实有一个字符的问题。 在处理和粘贴到Notepad ++后,我可以看到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}? 文本。不在Netbeans中。 如此纯粹的误解。

2 个答案:

答案 0 :(得分:2)

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

  

使用" Cp1252"无法映射某些字符。字符编码。

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

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}

如果您采用正常}的{​​{3}},则会获得7d

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

答案 1 :(得分:0)

那是因为你的替换字符串中有问号。因此,replacereplaceAll只是完全按照您要求他们的方式行事。