我想删除字符串中以'galery'开头并以'jssdk结尾)的所有子字符串;)
例如,请考虑以下字符串:
Galery什么东西.... jssdk));
我需要一个算法来删除'某事......'并返回'Galery jssdk));'
这就是我所做的,但它不起作用。
newsValues[1].replaceAll("Galery.*?jssdK));", "");
答案 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)
你几乎就在那里,但这将删除整个字符串。如果您要删除Galery
和jssdK));
之间的任何内容,则必须执行以下操作:
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”