2016-08-30 46 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"));