从java中的字符串中删除转义字符'\'

时间:2012-09-20 11:19:41

标签: java

我必须从字符串中删除\

我的字符串是"SEPIMOCO EUROPE\119"

我尝试了replaceindexOfPattern,但我无法从此字符串中删除此\

String strconst="SEPIMOCO EUROPE\119";
System.out.println(strconst.replace("\\", " ")); // Gives SEPIMOCO EUROPE 9
System.out.println(strconst.replace("\\\\", " ")); // Gives SEPIMOCO EUROPE 9
System.out.println(strconst.indexOf("\\",0));  //Gives -1

任何解决方案吗?

3 个答案:

答案 0 :(得分:10)

您的字符串实际上不包含反斜杠。这部分:“\ 11”被视为八进制转义序列(所以它实际上是一个标签 - U + 0009)。如果你真的想要反斜杠,你需要:

String strconst="SEPIMOCO EUROPE\\119";

目前还不清楚您从哪里获取输入数据或者您想要实现的目标,但这解释了您目前所看到的一切。

答案 1 :(得分:5)

您必须区分字符串文字,即您在源代码中编写的内容,用双引号括起来,以及它代表的字符串值。当将前者转变为后者时,escape sequences被解释,导致这两者之间存在差异。

从字符串文字中删除

文字中的

\11表示实际字符串值中具有八进制值11的字符,即制表符。 \11相当于\t

无法可靠地获取字符串文字的转义版本。换句话说,您无法知道源代码是否包含\11\t,因为该信息不再出现在类文件中。因此,如果您想从序列中“去除反斜杠”,则不会知道11t是否是正确的替代。

出于这个原因,您应该尝试修复字符串文字,要么根本不要包含反斜杠,要么包含正确的反斜杠,也可以在文字中转义它们。字符串文字中的\\在其表达的字符串中提供单个\

运行时字符串

当您对其他答案的评论表明您实际上是在运行时收到此字符串时,我希望该字符串包含一个真正的反斜杠而不是制表符。除非你使用一些解析转义序列的花哨的输入方法,否则你仍然会有原始的反斜杠。为了模拟测试代码中的这种情况,您应该在字符串中包含一个真正的反斜杠,即字符串文字中的双反斜杠\\

当你的字符串中有一个真正的反斜杠时,strconst.replace("\\", " ")应该按你想要的那样做:

String strconst="SEPIMOCO EUROPE\\119";
System.out.println(strconst.replace("\\", " ")); // Gives SEPIMOCO EUROPE 119

答案 2 :(得分:1)

你的字符串来自哪里?如果你在示例中声明它,你会想要在你那里之前添加另一个转义反斜杠。