我想刪除以'galery'開頭並以'jssdk'結尾的字符串中的任何子字符串));'Java如何刪除字符串中兩個子字符串之間的所有內容
例如,考慮以下字符串:
Galery東西.... jssdk));
我需要一個算法,刪除'東西東西....'並返回'Galery jssdk));''
這是我所做的,但它不起作用。
newsValues[1].replaceAll("Galery.*?jssdK));", "");
我想刪除以'galery'開頭並以'jssdk'結尾的字符串中的任何子字符串));'Java如何刪除字符串中兩個子字符串之間的所有內容
例如,考慮以下字符串:
Galery東西.... jssdk));
我需要一個算法,刪除'東西東西....'並返回'Galery jssdk));''
這是我所做的,但它不起作用。
newsValues[1].replaceAll("Galery.*?jssdK));", "");
或許可以得到改善,我已經快做到了:
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, "");
}
UPDATE THX接受的答案,但這裏是一個較小的修訂版本中:
public static String replaceMatching2(String input, String lowerBound, String upperBound){
String result = input.replaceAll("(.*?"+lowerBound + ")" + "(.*?)" + "(" + upperBound + ".*)", "$1$3");
return result;
}
的想法是實際上很簡單,將字符串分成3組,然後用第一組和第三組代替這三組,然後丟棄第二組。
好像你在更新的字符串中有一些額外的字符串連接。另外,你可以刪除'result'變量和'return input.replaceAll ...' – bphilipnyc
簡單的解決方案將與只是「邊緣」來替換字符串,有效地「刪除」 他們之間的一切。
newsValues[1].replaceAll("Galery.*?jssdK));", "GaleryjssdK));");
1:我用""
這裏,因爲它是不完全替代 - 記住字符串是不變的,所以它要創建一個新的對象,而「刪除」的一部分。
你幾乎在那裏,但那會刪除整個字符串。如果你想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
一個有用的方法是個好主意方法。
newsValues[1] = newsValues[1].substring(0,6)+newsValues.substring(newsValues[1].length()-5,newsValues[1].length())
這基本上將「Galery」和「jssdk」連接在一起,從而忽略或忽略其他所有內容。更重要的是,你可以簡單地賦值newValues [1] =「Galeryjssdk」
如果你知道它應該以'Galery'開始並以'jssdk'結束,爲什麼不''newString =「Galeryjssdk」而不是更換? – Keppil