4

我必须删除\从字符串中删除。

我的字符串是"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

有什么解决方案吗?

4

3 回答 3

10

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

String strconst="SEPIMOCO EUROPE\\119";

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

于 2012-09-20T11:21:56.133 回答
5

您必须区分字符串文字,即您在源代码中编写的内容,用双引号括起来,以及它所代表的字符串值。将前者转换为后者时,会解释转义序列,从而导致这两者之间的差异。

从字符串文字中剥离

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

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

出于这个原因,您应该尝试修复字符串文字,如果您根本不想要它们,则不包含反斜杠,或者通过在文字中转义它们来包含正确的反斜杠。in a string literal在它所表达的字符串中\\给出一个单一的。\

运行时字符串

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

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

String strconst="SEPIMOCO EUROPE\\119";
System.out.println(strconst.replace("\\", " ")); // Gives SEPIMOCO EUROPE 119
于 2012-09-20T11:22:09.267 回答
1

你的字符串来自哪里?如果您像示例中那样声明它,您将希望在您拥有的反斜杠之前添加另一个转义反斜杠。

于 2012-09-20T11:22:58.740 回答