0

我想删除以 'galery' 开头并以 'jssdk));' 结尾的字符串中的所有子字符串

例如,考虑以下字符串:
Galery something something.... jssdk));

我需要一个算法来删除'something something...'并返回'Galery jssdk));'

这就是我所做的,但它不起作用。

newsValues[1].replaceAll("Galery.*?jssdK));", "");
4

4 回答 4

3

可能可以改进,我做得很快:

  public static String replaceMatching(String input, String lowerBound, String upperBound{
    Pattern p = Pattern.compile(".*?"+lowerBound+"(.*?)"+upperBound+".*?");
    Matcher m = p.matcher(input);
    String textToRemove = "";

    while(m.find()){
        textToRemove = m.group(1);
    }
    return input.replace(textToRemove, "");
}

更新Thx 接受答案,但这里是一个较小的审查版本:

 public static String replaceMatching2(String input, String lowerBound, String upperBound){
      String result = input.replaceAll("(.*?"+lowerBound + ")" + "(.*?)" + "(" + upperBound + ".*)", "$1$3");
      return result;
 }

这个想法实际上很简单,将字符串分成 3 组,然后将这 3 组替换为第一组和第三组,删除第二组。

于 2012-08-22T07:29:10.737 回答
2

你快到了,但这会删除整个字符串。如果要删除 and 之间的任何内容GaleryjssdK));则必须执行以下操作:

String newStr = newsValues[1].replaceAll("(Galery)(.*?)(jssdK\\)\\);)","$1$3");

这会将字符串分组,然后使用这些组替换整个字符串。请注意,在正则表达式语法中,the)是一个特殊字符,因此需要对其进行转义。

String str = "GaleryABCDEFGjssdK));";
String newStr = str.replaceAll("(Galery)(.*?)(jssdK\\)\\);)","$1$3");
System.out.println(newStr);

这产生:GaleryjssdK));

我知道@amit 提出的解决方案更简单,但是,我认为向您展示一种可以使用该replaceAll方法的有用方式是个好主意。

于 2012-08-22T07:23:09.217 回答
0

最简单的解决方案是用“边缘”替换字符串,有效地“删除”它们之间的所有内容。

newsValues[1].replaceAll("Galery.*?jssdK));", "GaleryjssdK));");

1:我""在这里使用它是因为它没有完全替换 - 记住字符串是不可变的,所以它正在创建一个新对象,没有“删除”部分。

于 2012-08-22T07:21:08.233 回答
0
newsValues[1] = newsValues[1].substring(0,6)+newsValues.substring(newsValues[1].length()-5,newsValues[1].length())

这基本上将“Galery”和“jssdk”连接起来,离开或忽略其他所有内容。更重要的是,您可以简单地分配 newValues[1] = "Galeryjssdk"

于 2012-08-22T07:30:28.590 回答