package org.test4j.hamcrest.matcher.string; import org.test4j.tools.commons.StringHelper; /** * String Matcher配置模式 * * @author darui.wudr * */ public enum StringMode { /** * 忽略大小写 */ IgnoreCase { @Override public String process(String input) { if (input == null) { return null; } return input.toLowerCase(); } }, /** * 忽略空格 */ IgnoreSpace { @Override public String process(String input) { if (input == null) { return null; } StringBuilder buff = new StringBuilder(); char[] chars = input.toCharArray(); for (char ch : chars) { if (StringHelper.isSpace(ch) == false) { buff.append(ch); } } return buff.toString(); } }, /** * 忽略引号(单引号和双引号) */ IgnoreQuato { @Override public String process(String input) { if (input == null) { return null; } int length = input.length(); StringBuilder buff = new StringBuilder(); char[] chars = input.toCharArray(); for (int index = 0; index < length; index++) { char ch = chars[index]; if (ch == '"' || ch == '\'') { continue; } else { buff.append(ch); } } return buff.toString(); } }, /** * 把所有空格当做一样处理<br> * 即多个空格,换行,换页,TAB等等都当作一个空格来对待<br> * 如果 IgnoreSpace = true ,则不存在这种情况 */ SameAsSpace { @Override public String process(String input) { if (input == null) { return null; } int length = input.length(); StringBuilder buff = new StringBuilder(); char[] chars = input.toCharArray(); for (int index = 0; index < length; index++) { char ch = chars[index]; if (StringHelper.isSpace(ch)) { buff.append(' '); index = this.skipSpaceChar(chars, index + 1, length); } else { buff.append(ch); } } return buff.toString(); } /** * 跳过空白字符 */ private int skipSpaceChar(char[] chars, int start, int length) { for (int index = start; index < length; index++) { char ch = chars[index]; if (StringHelper.isSpace(ch) == false) { return index - 1; } } return length; } }, /** * 把单引号,双引号当作一样处理<br> * 如果 IgnoreQuato = true,则不存在这种情况 */ SameAsQuato { @Override public String process(String input) { if (input == null) { return null; } int length = input.length(); StringBuilder buff = new StringBuilder(); char[] chars = input.toCharArray(); for (int index = 0; index < length; index++) { char ch = chars[index]; if (ch == '"') { buff.append('\''); } else { buff.append(ch); } } return buff.toString(); } }, /** * 将斜杠 '\' 和反斜杠 '/' 都当作斜杠处理 */ SameAsSlash { @Override public String process(String input) { if (input == null) { return null; } int length = input.length(); StringBuilder buff = new StringBuilder(); char[] chars = input.toCharArray(); for (int index = 0; index < length; index++) { char ch = chars[index]; if (ch == '/') { buff.append('\\'); } else { buff.append(ch); } } return buff.toString(); } }; /** * 把字符串按模式处理完返回 * * @param input * @param modes * @return */ public abstract String process(String input); /** * 返回经过StringMode处理过的字符串 * * @param input * @param modes * @return */ public static String getStringByMode(String input, StringMode... modes) { if (modes == null || modes.length == 0) { return input; } String output = input; for (StringMode mode : modes) { output = mode.process(output); } return output; } public static String toString(StringMode... modes) { if (modes == null || modes.length == 0) { return "[]"; } StringBuilder buff = new StringBuilder("["); for (StringMode mode : modes) { buff.append(mode.name()).append(" "); } buff.append("]"); return buff.toString(); } }