例如我有这样一个字符串,我必须找到并替换多个子字符串,所有子字符串都以#
开头,包含6个符号,以'
结尾,不应包含{{1你觉得什么是达到这个目标的最好方法?
谢谢!
编辑: 还有一件事我忘了,为了替换,我需要那个子串,即它被替换为从被替换的子串生成的字符串。
答案 0 :(得分:5)
yourNewText=yourOldText.replaceAll("#[^)]{6}'", "");
或以编程方式:
Matcher matcher = Pattern.compile("#[^)]{6}'").matcher(yourOldText);
StringBuffer sb = new StringBuffer();
while(matcher.find()){
matcher.appendReplacement(sb,
// implement your custom logic here, matcher.group() is the found String
someReplacement(matcher.group());
}
matcher.appendTail(sb);
String yourNewString = sb. toString();
答案 1 :(得分:2)
假设您只知道子字符串的格式与您上面解释的一样,但不完全是6个字符,请尝试以下操作:
String result = input.replaceAll("#[^\\)]{6}'", "replacement"); //pattern to replace is #+6 characters not being ) + '
答案 2 :(得分:1)
这可能不是最好的方法,但是......
youstring = youstring.replace("#something'", "new stringx");
youstring = youstring.replace("#something2'", "new stringy");
youstring = youstring.replace("#something3'", "new stringz");
//阅读评论后编辑,谢谢
答案 3 :(得分:1)
您必须将replaceAll与正确的正则表达式一起使用:
myString.replaceAll("#[^)]{6}'", "something")
如果您需要替换匹配字符串的提取,请使用匹配组,如下所示:
myString.replaceAll("#([^)]{6})'", "blah $1 blah")
第二个String中的$ 1与第一个String中的第一个括号表达式匹配。