2013-11-27 78 views
0

如何過濾字符串?如何過濾字符串但保留一些標記

String[] filterTags={<A>,<BC>,<A,<B};

filterTags可以包含多個值,它可以包含一些字符串,數字或任何可以成長dyanmically

String name="<A><ABC><B><B" 

我想是從filterTags數組中刪除值,但保留<ABC>,因爲它是從名稱(字符串)

if (name.contains(filterTags[i])and ???) 

我只需要一個簡單的檢查,如果包含名稱(String),它將刪除filterTags值,但保留,因爲它是

感謝你在先進

+1

我很困惑 - 你目前有什麼代碼正在運行,或者你已經完成的工作?什麼邏輯規定刪除「」以外的標籤。該字符串的最終狀態應該是什麼? – 2013-11-27 17:25:56

+0

我只需要一個簡單的檢查,將刪除filterTags值,如果包含名稱,但保持,因爲它是 – user2940158

回答

1

好了,你可以用正則表達式做到這一點:

String filtered = name.replaceAll("(<A>|<BC>|<A|<B)", ""); 
// filtered == "<ABC>" 

現在的問題是創建該正則表達式字符串。你可以硬編碼它,因爲它看起來像這就是你與陣列反正做什麼,或者你可以做這樣的事情:

StringBuilder sb = new StringBuilder("("); 
for (String token : filterTags) { 
    sb.append(token); 
    sb.append('|'); 
} 
sb.deleteCharAt(sb.length() - 1); // Remove the last "|" 
sb.append(')'); 
String regex = sb.toString(); 

請注意,如果您的過濾器標記中不包含任何這隻會工作正則表達式特殊字符

+0

非常小,但良好的做法,優化 - 使用'sb.append('|')'和'sb.append( ')')'。如果只有一個字符會被追加,它將會保存StringBuilder在確定字符串大小方面的相當多工作,將其解包爲字符並附加每個字符。比較[StringBuilder.append(String)](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/AbstractStringBuilder.java#AbstractStringBuilder.append% 28java.lang.String%29)添加到基於char的append調用中。 – 2013-11-27 17:38:18

+0

@MichaelT謝謝,我不知道。編輯。 – quazzieclodo

+0

這就是隻有'append()'調用 - 不存在的構造函數(它仍然需要一個字符串(或容量int))。 – 2013-11-27 17:42:10

0

只要你能做到這一點與正則表達式

String name = "<A><ABC><c<B<s"; 
     pattern = Pattern.compile(".*(<ABC>).*"); 
     matcher = pattern.matcher(name); 
     matcher.matches(); 
     System.out.println(matcher.group(1)); // prints <ABC>