Java replaceAll()正则表达式不起作用
我正在尝试用“%”替换所有特殊字符,例如:
"123.456/789" -> "123%465%798"
我的正则表达式是:
[^a-zA-Z0-9]+
在在线工具*它完美地工作,但在java中
s.replaceAll("[^a-zA-Z0-9]+", "%");
字符串保持不变。
*我试过: http : //www.regexplanet.com/ http://regex101.com/和其他人
字符串是不可变的。 你忘了将新String
重新分配给s
变量:)
s = s.replaceAll("[^a-zA-Z0-9]+", "%"); // ^ this creates a new String
replaceAll()
与String类中的所有方法一样,不要修改调用方法的String
。 这就是我们说String
是不可变对象的原因。 如果你想“修改”它,你需要做
s = s.replaceAll("[^a-zA-Z0-9]+", "%");
实际上你不修改String s
。 这里发生的是从函数返回新的String
对象。 然后将其引用分配给s
。
您不能更改String,而是replaceAll返回一个新值。 所以你应该像这样使用它
String newStr = s.replace(...)
根据您的期望工作代码:)
import java.util.regex.Pattern; public class Regex { public static void main(String[] args) { String s = "123.456/789"; Pattern p = Pattern.compile("[^a-zA-Z0-9]+"); String newStr = s.replaceAll("[^a-zA-Z0-9]+", "%"); System.out.println(s + " -> " + newStr); } }
产量: 123.456 / 789 – > 123%456%789