[code="java"]import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static final Pattern REGEXP_PATTERN = Pattern.compile("(\\(.*\\))|(\\[.*\\])|(\\{.*\\})");
public static void main(String[] args) {
String name = "(()()()(())) ]]]]]]] [[]]";
System.out.println(matches(name, null));
}
public static boolean matches(String value, Map<String, AtomicInteger> counter) {
if(counter == null) {
counter = new HashMap<String, AtomicInteger>();
counter.put("(", new AtomicInteger(0));
counter.put("[", new AtomicInteger(0));
counter.put("{", new AtomicInteger(0));
}
int valueLength = value.length();
Matcher matcher = REGEXP_PATTERN.matcher(value);
while(matcher.find()) {
String group = matcher.group();
System.out.println("matches:" + group);
if(group.length() > 0) {
String prefix = group.substring(0, 1);
AtomicInteger count = counter.get(prefix);
if(count != null) {
count.incrementAndGet();
}
}
for(AtomicInteger count : counter.values()) {
if(count.get() > 1) {
return false;
}
}
matches(group.substring(1, group.length()-1), counter);
}
return true;
}
}
[/code]
你试一下 使用嵌套做的 可能效率不是很高