我正在尝试用“%”替换所有特殊字符,例如:
"123.456/789" -> "123%465%798"
我的正则表达式是:
[^a-zA-Z0-9]+
在在线工具*中,它可以完美地运行,但在java中
s.replaceAll("[^a-zA-Z0-9]+", "%");
字符串保持不变。
答案 0 :(得分:2)
字符串是不可变的。您忘记将新String
重新分配给s
变量:)
s = s.replaceAll("[^a-zA-Z0-9]+", "%");
// ^ this creates a new String
答案 1 :(得分:2)
replaceAll()
与String类中的所有方法一样,不要修改调用方法的String
。这就是我们说String
是不可变对象的原因。如果你想“修改”它,你需要做
s = s.replaceAll("[^a-zA-Z0-9]+", "%");
事实上,您不会修改String s
。这里发生的是从函数返回新的String
对象。然后将其引用分配给s
。
答案 2 :(得分:1)
您无法更改字符串,而是replaceAll返回新值。所以你应该像这样使用它
String newStr = s.replace(...)
答案 3 :(得分:0)
根据您的期望工作代码:)
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 强>