java String split方法重写

java jdk String的split方法,在分割字符串的时,如果分割标记在字符串的开始处,在分割结束后,字符串数组的第一个元素为空,会给业务逻辑的处理带来小小的麻烦。改造一下。

package cn.com.king.util;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringUtil {
	
	/**
	 * 字符串分割,如果分隔符在首位,在splitChar为false时,首位的空将被忽略。这是和jdk中string的split的区别
	 * @param input 待分割的字符串
	 * @param regex 字符串的分割标记,正则表达式
	 * @param splitChar 是否包含分割标记,默认为不包含
	 * @param isAfter 分割标记附加在截取字符串的前面还是后面,默认前面
	 * @return List字符串列表
	 */
	public static List split(String input, String regex, boolean splitChar, boolean isAfter) {
		List list = new ArrayList();
		if (null == input || "".equals(input)) {
			return list;
		}
		int beginIndex = 0;
		int length = input.length();
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(input);
		while (matcher.find()) {
			int matcherStart = matcher.start();
			int matcherEnd = matcher.end();
			String ele = "";
			if (splitChar && isAfter) {
				ele = input.substring(beginIndex, matcherEnd);
			} else {
				ele = input.substring(beginIndex, matcherStart);
			}
			//if包含分割符,else不包含分割符
			if (splitChar) {
				if (isAfter) {
					beginIndex = matcherEnd;
				} else {
					beginIndex = matcherStart;
				}
			} else {
				beginIndex = matcherEnd;
			}
			//如果分隔符在字符序列的头位置,就忽略。这是java正则表达式本身的分割机制所致。
			if (0 == matcherStart && false == isAfter) {
				continue;
			}
			list.add(ele);
		}
		if (beginIndex < length) {
			list.add(input.substring(beginIndex));
		}
		return list;
	}
	
	/**
	 * 字符串分割
	 * @param input 待分割的字符串
	 * @param regex 字符串的分割标记,正则表达式
	 * @param splitChar 是否包含分割标记,默认为不包含
	 * @return List字符串列表
	 */
	public static List split(String input, String regex, boolean splitChar) {
		return split(input, regex, splitChar, false);
	}
	
	/**
	 * 字符串分割
	 * @param input 待分割的字符串
	 * @param regex 字符串的分割标记,正则表达式
	 * @return List字符串列表
	 */
	public static List split(String input, String regex) {
		return split(input, regex, false);
	}
	
	public static void main(String[] args) {
		System.out.println(split("#menu*A#123#12*中文#444", "\\*|#"));
		System.out.println(split("menu", "\\*|#"));
	}
}

  

你可能感兴趣的:(java,工具类和方法)