我必须从字符串中删除\
。
我的字符串是"SEPIMOCO EUROPE\119"
我尝试了replace
,indexOf
,Pattern
,但我无法从此字符串中删除此\
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
任何解决方案吗?
答案 0 :(得分:10)
您的字符串实际上不包含反斜杠。这部分:“\ 11”被视为八进制转义序列(所以它实际上是一个标签 - U + 0009)。如果你真的想要反斜杠,你需要:
String strconst="SEPIMOCO EUROPE\\119";
目前还不清楚您从哪里获取输入数据或者您想要实现的目标,但这解释了您目前所看到的一切。
答案 1 :(得分:5)
您必须区分字符串文字,即您在源代码中编写的内容,用双引号括起来,以及它代表的字符串值。当将前者转变为后者时,escape sequences被解释,导致这两者之间存在差异。
\11
表示实际字符串值中具有八进制值11
的字符,即制表符。 \11
相当于\t
。
无法可靠地获取字符串文字的转义版本。换句话说,您无法知道源代码是否包含\11
或\t
,因为该信息不再出现在类文件中。因此,如果您想从序列中“去除反斜杠”,则不会知道11
或t
是否是正确的替代。
出于这个原因,您应该尝试修复字符串文字,要么根本不要包含反斜杠,要么包含正确的反斜杠,也可以在文字中转义它们。字符串文字中的\\
在其表达的字符串中提供单个\
。
当您对其他答案的评论表明您实际上是在运行时收到此字符串时,我希望该字符串包含一个真正的反斜杠而不是制表符。除非你使用一些解析转义序列的花哨的输入方法,否则你仍然会有原始的反斜杠。为了模拟测试代码中的这种情况,您应该在字符串中包含一个真正的反斜杠,即字符串文字中的双反斜杠\\
。
当你的字符串中有一个真正的反斜杠时,strconst.replace("\\", " ")
应该按你想要的那样做:
String strconst="SEPIMOCO EUROPE\\119";
System.out.println(strconst.replace("\\", " ")); // Gives SEPIMOCO EUROPE 119
答案 2 :(得分:1)
你的字符串来自哪里?如果你在示例中声明它,你会想要在你那里之前添加另一个转义反斜杠。