2016-08-30 64 views
1

在此字符串替換字符串:含括號

val s = "pow(10,3) + pow(10,3) + pow(10,3)" 

我需要

1000 

更換

pow(10,3) 

因此,最終結果將是

1000 + 1000 + 1000 

s.replaceAll("pow(10,3)", "1000") 

試圖然而,這並不工作作爲第一個參數是一個正則表達式,並且圓括號表示一組。上述聲明實際上並不取代任何內容。有任何想法嗎?

+0

用途:POW \\(10,3 \\),因爲括號是用於嘗試組 –

+0

's.replace(「POW( 10,3)「,」1000「)'? –

+0

@WiktorStribiżew是不是字符串只替換字符? – ps0604

回答

3

要替換文本字符串,不要使用replaceAll,使用replace

this Scala demo

val s = "pow(10,3) + pow(10,3) + pow(10,3)"; 
print(s.replace("pow(10,3)", "1000")); 
// => 1000 + 1000 + 1000 

如果您需要使用replaceAll,字面括號必須用加倍反斜線:

s.replaceAll("pow\\(10,3\\)", "1000") 

或者,使用三引號字符串字面量和使用一個反斜槓來逃避特殊的正則表達式元字符:

s.replaceAll("""pow\(10,3\)""", "1000") 

this Scala demoanother one here

兩個replaceAllreplace將取代多個出現

replace,你可以使用replaceAllLiterally(literal: String, replacement: String): String

參見Is there ever a reason to use Scala's StringLike.replaceAllLiterally over Java's String.replace?

+0

只是出於好奇,我不明白爲什麼你需要雙向反斜槓括號,這是一個斯卡拉的事情? – EndermanAPM

+1

好吧,你不*必須*必須。如果你使用三重引號字符串,你可以使用單個反斜槓 - ['s.replaceAll(「」「pow \(10,3 \)」「」,「1000」)'](https:// ideone。 COM/qz42xk)。重點是雙引號字符串文字可以具有像\ n這樣的轉義序列,所以反斜線寫爲「\\」',我們需要一個* literal *反斜線來轉義正則表達式元字符。 –

1

你需要逃避()\否則就會被視爲組

var re = /pow\(10,3\)/g; 
 
var str = 'pow(10,3) + pow(10,3) + pow(10,3)'; 
 
var subst = '1000'; 
 
    
 
var result = str.replace(re, subst); 
 
console.log(result);
更新:斯卡拉

你需要加倍逃避支架爲:str.replaceAll("pow\\(10,3\\)", "1000"))

+2

我需要用scala做到這一點,而不是javascript – ps0604

0

你可以用反斜槓轉義括號,這樣他們就像另一個字符一樣對待ter:

"""pow\(10,3\)""" 
+0

是這個scala或javascript? – ps0604

+0

這是一個正則表達式,在你的代碼中它看起來像:'s.replaceAll(「pow \(10,3 \)」,「1000」)' – EndermanAPM

+0

如何轉換字符串'pow(10,3)'到'pow \(10,3 \)'斯卡拉? – ps0604

1

嘗試replaceAllLiterally,它接受String literal作爲輸入。

val str = "pow(10,3) + pow(10,3) + pow(10,3)"; 
println(str.replaceAllLiterally("pow(10,3)", "1000"));