package jef.testbase; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import jef.tools.StringUtils; import org.junit.Test; public class StringAnalyzeTest { private static final char[] END_CHARS = { '\'', '"', ' ', '>' }; @Test public void test() { String str = "<a href='http://www.baidu.com' title='百度' width=\"100%\" height=50>"; System.out.println(analyze(str)); } public static Map<String,String> analyze(String str) { Map<String, String> result = new HashMap<String, String>(); AtomicInteger pos = new AtomicInteger(0); String[] entry = nextEntry(str, pos); while (entry != null) { result.put(entry[0], entry[1]); entry = nextEntry(str, pos); } return result; } private static String[] nextEntry(String str, AtomicInteger i) { int start = str.indexOf(' ', i.get()); if (start < 0) return null; start++; int keyEnd = str.indexOf('=', start); String key = str.substring(start, keyEnd); // 找到开始点 int valueStart = keyEnd + 1; char quot = str.charAt(valueStart); if (quot == '\'' || quot == '"') { valueStart++; } // 找到结束点 int urlend = StringUtils.indexOfAny(str, END_CHARS, valueStart); String value = str.substring(valueStart, urlend); i.set(urlend + 1); return new String[] { key, value }; } }