Java如何删除字符串中两个子字符串之间的所有内容

时间:2012-08-22 07:19:24

标签: java replace substring

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

例如,请考虑以下字符串:
   Galery什么东西.... jssdk));

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

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

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

4 个答案:

答案 0 :(得分: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组,删除第二组。

答案 1 :(得分:2)

你几乎就在那里,但这将删除整个字符串。如果您要删除GaleryjssdK));之间的任何内容,则必须执行以下操作:

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

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

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

这会产生:GaleryjssdK));

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

newsValues[1] = newsValues[1].substring(0,6)+newsValues.substring(newsValues[1].length()-5,newsValues[1].length())

这基本上连接了“Galery”和“jssdk”离开或忽略其他一切。更重要的是,您可以简单地分配newValues [1] =“Galeryjssdk”