Java String.replace/replaceAll 不工作
Java String.replace/replaceAll not working
因此,我正在尝试解析 Java 中包含(左)方括号的字符串输入。我有 str.replace("\[", "")
,但这绝对没有任何作用。我也尝试过 replaceAll
,使用不止一种不同的正则表达式,但输出始终不变。我的一部分想知道这是否可能是由于我所有的反斜杠字符都显示为日元符号(自从我将日语添加到我的语言中以来)这一事实造成的,但这种情况已经存在一年多了,并没有给我带来任何影响像这样的问题。
知道我这里可能做错了什么吗?
字符串在 Java 中是不可变的。确保将 return 值重新分配给相同的 String
变量:
str = str.replaceAll("\[", "");
对于普通的replace
方法,不需要转义括号:
str = str.replace("[", "");
一如既往,问题不在于"xxx doesn't work",在于你不知道如何使用它。
要事第一:
- a
String
是不可变的;如果您阅读 .replace()
和 .replaceAll()
的 javadoc,您会看到两者都指定 返回一个新的 String
实例;
replace()
接受 字符串文字 作为其第一个参数,而不是正则表达式文字。
这意味着您可能打算这样做:
str = str.replace("[", "");
如果你只做:
str.replace("[", "");
然后将创建新实例,但您忽略它...
此外,这是String
的一个常见陷阱(另一个是.matches()
被错误命名),尽管他们各自的名字,.replace()
does 用第二个参数替换所有出现的第一个参数;唯一的区别是 .replaceAll()
接受正则表达式作为第一个参数,"regex aware" 表达式作为第二个参数;有关详细信息,请参阅 Matcher
的 .replaceAll()
.
的 javadoc
public String replaceAll(String regex, String replacement)
如上面的代码所示,replaceAll 方法需要第一个参数作为正则表达式,因此您需要转义字符,如“(”,“)" 等(带有“\”),如果这些存在于要从字符串中替换的替换文本中。例如:
String oldString = "This is (stringTobeReplaced) with brackets.";
String newString = oldString.replaceAll("\(stringTobeReplaced\)", "");
System.out.println(newString); // will output "This is with brackets."
另一种方法是使用 Pattern.quote("str") :
String newString = oldString.replaceAll(Pattern.quote("(stringTobeReplaced)"), "");
这会将字符串视为要替换的文字。
它必须在一个方法中才能工作。
例如:
public class AnyClass {
String str = "gtrg4\r\n" + "grtgy\r\n" + "grtht\r\n" + "htrjt\r\n" + "jtyjr\r\n" + "kytht";
public String getStringModified() {
str.replaceAll("\r\n", "");
return str;
}
}
因此,我正在尝试解析 Java 中包含(左)方括号的字符串输入。我有 str.replace("\[", "")
,但这绝对没有任何作用。我也尝试过 replaceAll
,使用不止一种不同的正则表达式,但输出始终不变。我的一部分想知道这是否可能是由于我所有的反斜杠字符都显示为日元符号(自从我将日语添加到我的语言中以来)这一事实造成的,但这种情况已经存在一年多了,并没有给我带来任何影响像这样的问题。
知道我这里可能做错了什么吗?
字符串在 Java 中是不可变的。确保将 return 值重新分配给相同的 String
变量:
str = str.replaceAll("\[", "");
对于普通的replace
方法,不需要转义括号:
str = str.replace("[", "");
一如既往,问题不在于"xxx doesn't work",在于你不知道如何使用它。
要事第一:
- a
String
是不可变的;如果您阅读.replace()
和.replaceAll()
的 javadoc,您会看到两者都指定 返回一个新的String
实例; replace()
接受 字符串文字 作为其第一个参数,而不是正则表达式文字。
这意味着您可能打算这样做:
str = str.replace("[", "");
如果你只做:
str.replace("[", "");
然后将创建新实例,但您忽略它...
此外,这是String
的一个常见陷阱(另一个是.matches()
被错误命名),尽管他们各自的名字,.replace()
does 用第二个参数替换所有出现的第一个参数;唯一的区别是 .replaceAll()
接受正则表达式作为第一个参数,"regex aware" 表达式作为第二个参数;有关详细信息,请参阅 Matcher
的 .replaceAll()
.
public String replaceAll(String regex, String replacement)
如上面的代码所示,replaceAll 方法需要第一个参数作为正则表达式,因此您需要转义字符,如“(”,“)" 等(带有“\”),如果这些存在于要从字符串中替换的替换文本中。例如:
String oldString = "This is (stringTobeReplaced) with brackets.";
String newString = oldString.replaceAll("\(stringTobeReplaced\)", "");
System.out.println(newString); // will output "This is with brackets."
另一种方法是使用 Pattern.quote("str") :
String newString = oldString.replaceAll(Pattern.quote("(stringTobeReplaced)"), "");
这会将字符串视为要替换的文字。
它必须在一个方法中才能工作。
例如:
public class AnyClass {
String str = "gtrg4\r\n" + "grtgy\r\n" + "grtht\r\n" + "htrjt\r\n" + "jtyjr\r\n" + "kytht";
public String getStringModified() {
str.replaceAll("\r\n", "");
return str;
}
}