2012-08-22 30 views
0

我想刪除以'galery'開頭並以'jssdk'結尾的字符串中的任何子字符串));'Java如何刪除字符串中兩個子字符串之間的所有內容

例如,考慮以下字符串:
Galery東西.... jssdk));

我需要一個算法,刪除'東西東西....'並返回'Galery jssdk));''

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

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

如果你知道它應該以'Galery'開始並以'jssdk'結束,爲什麼不''newString =「Galeryjssdk」而不是更換? – Keppil

回答

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, ""); 
} 

UPDATE THX接受的答案,但這裏是一個較小的修訂版本中:

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

的想法是實際上很簡單,將字符串分成3組,然後用第一組和第三組代替這三組,然後丟棄第二組。

+0

好像你在更新的字符串中有一些額外的字符串連接。另外,你可以刪除'result'變量和'return input.replaceAll ...' – bphilipnyc

0

簡單的解決方案將與只是「邊緣」來替換字符串,有效地「刪除」 他們之間的一切。

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

1:我用""這裏,因爲它是不完全替代 - 記住字符串是不變的,所以它要創建一個新的對象,而「刪除」的一部分。

1

你幾乎在那裏,但那會刪除整個字符串。如果你想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一個有用的方法是個好主意方法。

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

這基本上將「Galery」和「jssdk」連接在一起,從而忽略或忽略其他所有內容。更重要的是,你可以簡單地賦值newValues [1] =「Galeryjssdk」

相關問題