package com.github.shansun.sparrow.tool; import java.util.Map; import com.google.common.base.Strings; import com.google.common.collect.Maps; /** * @author lanbo <br> * @version 1.0 <br> * @date 2012-8-27 */ public class FeatureParseTool { private static final String EMPTY_STRING = ""; private static final String DELIM_SEM = ";"; private static final String DELIM_EQ = "="; public static boolean hasFeature(String featureStr, String feature) { if (Strings.isNullOrEmpty(featureStr)) return false; return featureStr.contains(wrapKey(feature)); } public static String addFeature(String featureStr, String feature) { if (Strings.isNullOrEmpty(featureStr)) { return wrapKey(feature); } if (hasFeature(featureStr, feature)) { return featureStr; } return featureStr + feature + DELIM_SEM; } public static String removeFeature(String featureStr, String feature) { if (hasFeature(featureStr, feature)) { String removed = featureStr.replace(feature + DELIM_SEM, EMPTY_STRING); if (DELIM_SEM.equals(removed)) { return EMPTY_STRING; } else { return removed; } } return featureStr; } public static boolean hasOption(String featureStr, String key) { return parseOptions(featureStr).containsKey(key); } public static String getOption(String featureStr, String key) { return parseOptions(featureStr).get(key); } public static String removeOption(String featureStr, String key) { if (Strings.isNullOrEmpty(featureStr) || Strings.isNullOrEmpty(key)) { return null; } String[] features = featureStr.split(DELIM_SEM); for (String feature : features) { String[] kv = feature.split(DELIM_EQ); if (kv.length != 2) { continue; } else { if (key.equals(kv[0])) { return removeFeature(feature, key); } } } return null; } public static String addOption(String featureStr, String key, String value) { String feature = key + DELIM_EQ + value; return addFeature(featureStr, feature); } private static String wrapKey(String key) { return DELIM_SEM + key + DELIM_SEM; } private static Map<String, String> parseOptions(String featureStr) { Map<String, String> result = Maps.newHashMap(); if (featureStr == null) { return result; } String[] features = featureStr.split(DELIM_SEM); for (String feature : features) { String[] kv = feature.split(DELIM_EQ); if (kv.length != 2) { continue; } else { result.put(kv[0], kv[1]); } } return result; } public static void main(String[] args) { String feature = addFeature(null, "hello"); System.out.println(feature); feature = addFeature(feature, "world"); System.out.println(feature); System.out.println(hasFeature(feature, "world1")); feature = removeFeature(feature, "hello"); System.out.println(feature); feature = removeFeature(feature, "world"); System.out.println(feature); feature = addOption(feature, "key1", "val1"); System.out.println(feature); System.out.println(hasOption(feature, "key1")); feature = removeFeature(feature, "key2"); System.out.println(feature); feature = removeOption(feature, "key1"); System.out.println(feature); } }