在此字符串替換字符串:含括號
val s = "pow(10,3) + pow(10,3) + pow(10,3)"
我需要
1000
更換
pow(10,3)
因此,最終結果將是
1000 + 1000 + 1000
我
s.replaceAll("pow(10,3)", "1000")
試圖然而,這並不工作作爲第一個參數是一個正則表達式,並且圓括號表示一組。上述聲明實際上並不取代任何內容。有任何想法嗎?
在此字符串替換字符串:含括號
val s = "pow(10,3) + pow(10,3) + pow(10,3)"
我需要
1000
更換
pow(10,3)
因此,最終結果將是
1000 + 1000 + 1000
我
s.replaceAll("pow(10,3)", "1000")
試圖然而,這並不工作作爲第一個參數是一個正則表達式,並且圓括號表示一組。上述聲明實際上並不取代任何內容。有任何想法嗎?
要替換文本字符串,不要使用replaceAll
,使用replace
。
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 demo和another one here。
兩個replaceAll
和replace
將取代多個出現。
旁replace
,你可以使用replaceAllLiterally(literal: String, replacement: String): String
參見Is there ever a reason to use Scala's StringLike.replaceAllLiterally over Java's String.replace?
只是出於好奇,我不明白爲什麼你需要雙向反斜槓括號,這是一個斯卡拉的事情? – EndermanAPM
好吧,你不*必須*必須。如果你使用三重引號字符串,你可以使用單個反斜槓 - ['s.replaceAll(「」「pow \(10,3 \)」「」,「1000」)'](https:// ideone。 COM/qz42xk)。重點是雙引號字符串文字可以具有像\ n這樣的轉義序列,所以反斜線寫爲「\\」',我們需要一個* literal *反斜線來轉義正則表達式元字符。 –
你需要逃避(
和)
與\
否則就會被視爲組
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"))
我需要用scala做到這一點,而不是javascript – ps0604
你可以用反斜槓轉義括號,這樣他們就像另一個字符一樣對待ter:
"""pow\(10,3\)"""
是這個scala或javascript? – ps0604
這是一個正則表達式,在你的代碼中它看起來像:'s.replaceAll(「pow \(10,3 \)」,「1000」)' – EndermanAPM
如何轉換字符串'pow(10,3)'到'pow \(10,3 \)'斯卡拉? – ps0604
嘗試replaceAllLiterally
,它接受String literal
作爲輸入。
val str = "pow(10,3) + pow(10,3) + pow(10,3)";
println(str.replaceAllLiterally("pow(10,3)", "1000"));
用途:POW \\(10,3 \\),因爲括號是用於嘗試組 –
's.replace(「POW( 10,3)「,」1000「)'? –
@WiktorStribiżew是不是字符串只替換字符? – ps0604