如何过滤字符串但保留一些标签

时间:2013-11-27 17:23:10

标签: java

我怎样才能过滤字符串?

  

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

filterTags可以包含更多值,它可以包含一些字符串,数字或任何可以动态增长的内容

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

我想要的是从filterTags数组中删除值,但保留<ABC>,因为它来自名称(String)

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

我只需要一个简单的检查,如果包含在名称(String)中,将删除filterTags值,但保持原样

先谢谢你

2 个答案:

答案 0 :(得分: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();

请注意,这仅适用于过滤器代码不包含任何正则表达式特殊字符的情况

答案 1 :(得分: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>