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

Java 如何查找和替换子字符串?,java,android,Java,Android,例如,我有这样一个字符串,我必须在其中查找并替换多个子字符串,所有子字符串都以#开头,包含6个符号,以'结尾,并且不应包含)。。。你认为实现这一目标的最佳方式是什么 谢谢 编辑: 还有一件事我忘记了,为了进行替换,我需要这个子字符串,也就是说,它被替换的子字符串生成的字符串替换。这可能不是最好的方法,但是 youstring = youstring.replace("#something'", "new stringx"); youstring = youstring.replace("#som

例如,我有这样一个字符串,我必须在其中查找并替换多个子字符串,所有子字符串都以
#
开头,包含6个符号,以
'
结尾,并且不应包含
。。。你认为实现这一目标的最佳方式是什么

谢谢

编辑:
还有一件事我忘记了,为了进行替换,我需要这个子字符串,也就是说,它被替换的子字符串生成的字符串替换。

这可能不是最好的方法,但是

youstring = youstring.replace("#something'", "new stringx");
youstring = youstring.replace("#something2'", "new stringy");
youstring = youstring.replace("#something3'", "new stringz");

//阅读评论后编辑,谢谢

假设您只知道子字符串的格式与上面解释的相同,但不知道具体是哪6个字符,请尝试以下操作:

String result = input.replaceAll("#[^\\)]{6}'", "replacement"); //pattern to replace is #+6 characters not being ) + '

或以编程方式:

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();

必须将replaceAll与正确的正则表达式一起使用:

myString.replaceAll("#[^)]{6}'", "something")
如果需要替换为匹配字符串的提取,请使用匹配组,如下所示:

myString.replaceAll("#([^)]{6})'", "blah $1 blah")

第二个字符串中的$1与第一个字符串中的第一个括号表达式相匹配。

编写正则表达式并进行匹配?@Roger听起来你已经找到了模式-你应该尝试使用正则表达式。这比你想象的要容易!谢谢,伙计,哦,还有一点我想我忘了,为了替换,我需要那个子字符串,也就是说,它被替换的子字符串生成的字符串替换。方括号内的转义是必要的吗?@Sean它们可能没有必要(至少我不确定),但我喜欢保持一致,也就是说,如果我必须在外部转义它们,我更愿意在里面转义它们。如果你实际上不使用正则表达式,你应该使用
String.replace()
,而不是
String.replaceAll()
不要忘记分配结果,也就是说,您的方法将丢失替换的结果。如果要替换任意数量的字符串,则可能需要任意数量的代码。不要忘记结果的赋值:)还有一个问题,我想我忘记了,要进行替换,我需要该子字符串,例如,它被替换的子字符串生成的字符串替换。@罗杰:好的,你以前应该这么说,这意味着你必须通过编程来完成。看我的眼睛,我想可能会制作一个这些子字符串的数组,然后循环通过它们并在字符串中替换它们。再想想我忘了,要进行替换,我需要该子字符串,即它被替换的子字符串生成的字符串替换。
myString.replaceAll("#([^)]{6})'", "blah $1 blah")