2011-04-08 185 views
20

如何更改反斜杠的字符串替换。字符串替换反斜杠

输入源字符串:

sSource = "http://www.example.com\/value"; 

在上述字符串我要替换 “\ /” 与 “/”;

预计输出继电器更换后:

sSource = "http://www.example.com/value"; 

我从第三方获取源字符串,因此,我在字符串的格式控制。

这是我曾尝试

试验1:

sSource.replaceAll("\\", "/"); 

异常 意外的内部接近指数1 错误\

试验2:

sSource.replaceAll("\\/", "/"); 

没有例外,但没有做必要的更换。什么都不做。

试验3:

sVideoURL.replace("\\", "/"); 

也不例外,但没有做的必要时更换。什么都不做。

+0

顺便说一句,你源不能是'\ /'如果你将其声明为字符串文字。但我会认为它来自别的地方。 – Bozho 2011-04-08 14:27:03

+0

在你的例子中,你替换\没有,而不是/;已经有了一个前锋。 – 2011-04-08 14:28:33

+0

[String.replaceAll反斜杠问题]的可能重复(http://stackoverflow.com/questions/1701839/backslash-problem-with-string-replaceall) – McDowell 2011-05-26 08:38:06

回答

33
sSource = sSource.replace("\\/", "/"); 
  • String是不可改变的 - 每次你就可以调用方法不改变其状态。它将返回一个保存新状态的新实例。所以你必须将新值赋给一个变量(它可以是相同的变量)
  • replaceAll(..)使用正则表达式。你不需要那个。
4

尝试

sSource = sSource.replaceAll("\\\\", ""); 

编辑:好,甚至在计算器有反斜杠逃逸......你需要有四个反斜杠在你的replaceAll第一字符串参数...

这样做的原因是因为反斜杠被认为是特殊字符的转义字符(例如\ n)。
此外,replaceAll第一个参数arg是一个正则表达式,它也使用反斜杠作为转义序列。
因此,对于正则表达式,您需要传递2个反斜杠。要通过java字符串将这两个反斜杠传递给replaceAll,您还需要转义两个反斜杠。
驱动你有四个反斜杠为你的表达!这是java中的正则表达式的美丽;)

+0

将无法​​正常工作。使用replace()而不是replaceAll()或使用四个反斜杠 – 2011-04-08 14:23:27

+0

对于stackoverflow语法,请使用前面的四个空格来禁用解析(并将其格式化为代码)。 – 2011-04-08 14:25:42

+1

是的,我没有看到我的反斜杠没有逃脱:)我编辑了我的答案 – greydet 2011-04-08 14:30:22

17

尝试replaceAll("\\\\", "")replaceAll("\\\\/", "/")

这里的问题是反斜杠是(1)Java字符串中的转义字符,以及(2)正则表达式中的转义字符 - 这些用途中的每一个都需要翻倍字符,实际上需要4 \在排队。


编辑:当然,作为Bozho说,你需要做一些事情的结果(其分配给一些变量),而不是把它扔掉。在这种情况下,非正则表达式变得更好。

1

你要做的

sSource.replaceAll("\\\\/", "/"); 

因为backshlash应为字符串源之一,正则表达式

4
s.replaceAll ("\\\\", ""); 

转义两次一个你需要屏蔽一个反斜杠在源,以及正则表达式,你需要再次掩饰它,所以对于每个反斜杠,你需要两个,其结尾为4.

但是

s = "http://www.example.com\\/value"; 

也需要源代码中的两个反斜杠。

3

与前字符串中的斜杠这将取代反斜线:

source = source.replace('\\','/'); 
+0

简单和简单:D和没有正则表达式;) – FibreFoX 2016-05-11 08:24:47

0
sSource = StringUtils.replace(sSource, "\\/", "/") 
+0

你能解释OP的代码有什么问题,为什么这个更好用? – vyegorov 2014-10-15 11:29:43

0

要以特定的位置替换反斜线:

if ((stringValue.contains("\\"))&&(stringValue.indexOf("\\", location-1)==(location-1))) { 
    stringValue=stringValue.substring(0,location-1); 
}