如何查找和替换子字符串?

时间:2011-09-21 09:38:58

标签: java android

例如我有这样一个字符串,我必须找到并替换多个子字符串,所有子字符串都以#开头,包含6个符号,以'结尾,不应包含{{1你觉得什么是达到这个目标的最好方法?

谢谢!

编辑: 还有一件事我忘了,为了替换,我需要那个子串,即它被替换为从被替换的子串生成的字符串。

4 个答案:

答案 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中的第一个括号表达式匹配。