2011-04-08 187 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); 
}