`
lizhou
  • 浏览: 109906 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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<String>字符串列表
	 */
	public static List<String> split(String input, String regex, boolean splitChar, boolean isAfter) {
		List<String> list = new ArrayList<String>();
		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<String>字符串列表
	 */
	public static List<String> split(String input, String regex, boolean splitChar) {
		return split(input, regex, splitChar, false);
	}
	
	/**
	 * 字符串分割
	 * @param input 待分割的字符串
	 * @param regex 字符串的分割标记,正则表达式
	 * @return List<String>字符串列表
	 */
	public static List<String> 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", "\\*|#"));
	}
}

  

0
0
分享到:
评论
1 楼 di1984HIT 2014-02-20  
恩,不错。呵呵。

相关推荐

    String类方法总结

    标题:“String类方法总结...这些方法共同构成了`String`类的核心功能,熟练掌握它们对于任何Java程序员来说都是必不可少的。无论是处理用户输入、文件读写还是网络通信,`String`类的这些方法都扮演着至关重要的角色。

    java面试题-50道最容易考的java题

    2. **== 与 equals**:在 Java 中,`==` 比较的是基本类型的值或者引用类型的地址,而 `equals` 默认情况下也进行引用比较,除非对象的类重写了 `equals` 方法,此时它通常用于比较对象的内容。例如,对于 `String` ...

    2022最新java面试题大全

    4. String 类的常用方法:indexOf()、charAt()、replace()、trim()、split()、getBytes()、length()、toLowerCase()、toUpperCase()、substring()、equals()、toCharArray()。 数据类型和运算符 1. 基本数据类型...

    JAVA中常用类的常用方法.docx

    13. split(String regex) 方法:根据给定正则表达式的匹配拆分此字符串。 14. startsWith(String prefix) 方法:测试此字符串是否以指定的前缀开始。 15. substring(int beginIndex) 方法:返回一个新的字符串,它...

    Java面试题大全2023版.docx

    equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。总结 :== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类...

    Java面试题200+1

    - Java中处理字符串的主要类是`String`,它提供了丰富的API来进行各种操作,如连接(`concat`)、查找(`indexOf`、`contains`)、替换(`replace`)、分割(`split`)等。 - 若要反转字符串,可以使用`...

    Java面试宝典2017

    - `interface`只能声明方法(从Java 8开始可以有默认方法和静态方法),所有方法默认是公共的。 #### 25. `abstract`方法的特性 - `abstract`方法不可以同时是`static`,因为`static`方法与类关联而不是对象。 - `...

    java题库,超赞

    35. 使用String的split方法可以将逗号分隔的字符串转换成数组。 36. 数组使用length属性获取长度,String使用length()方法。 37. 字符串字面量相加只会创建一个字符串对象,但通过new创建的字符串对象每次都会创建新...

    java面试宝典

    - `abstract`方法不能是`static`,因为`abstract`方法必须被子类重写,而`static`方法属于类而不属于对象。 - `abstract`方法可以是`native`,表示该方法将在本地代码中实现。 - `abstract`方法不能是`synchronized`...

    Java面试葵花宝典2012版

    - 使用`split`方法可以将字符串按照分隔符分割成数组,例如:`String[] arr = str.split(",");`。 #### 36. 数组与字符串的长度方法 - 数组没有`length()`方法,但有`length`属性。 - `String`类有`length()`方法...

    java 面试题 2017

    31. 可以使用String的split方法将逗号分割的字符串转换成数组。 32. 数组有一个length属性,而String有一个length方法,返回字符的个数。 33. 字符串拼接操作创建了多个对象,每进行一次+操作就会创建一个新的String...

    面试题(java基础1-5).pdf

    在Java中,String类中的常用方法有split()、indexOf()、replace()、subString()、equals()、concat()等。其中,split()方法可以将字符串分割成字符串数组,indexOf()方法可以从指定字符提取索引位置,replace()方法...

    Java SE基础.docx

    继承允许一个类继承另一个类的属性和方法,子类可以重写父类的方法以提供不同的实现。 ```java public class Animal { public void eat() { System.out.println("吃东西"); } } public class Dog extends ...

    java程序员面试宝典

    35. 将逗号分隔的字符串转换成数组可以使用String类的split()方法。 36. 数组有length属性,用于获取数组长度,String没有length()方法,但可以使用length属性或length()方法获取字符串长度。 37. Strings="a"+"b...

    Java面试宝典

    - **知识点**: Java中通过方法重写和接口实现来实现多态性。 - **举例**: ```java public class Base { public void method() { System.out.println("Base"); } } public class Derived extends Base { @...

    StringManipulation:Java中的字符串处理算法

    5. 分割:`split(String regex)`按照正则表达式分割字符串成数组。 三、字符串的不可变性 Java中的字符串是不可变的,这意味着一旦创建,其内容就不能改变。每次对字符串进行修改,都会创建新的字符串对象,这可能...

    JAVA面试题汇总(基础、容器、多线程等等).docx

    10. String 类的常用方法:indexOf()、charAt()、replace()、trim()、split()、getBytes()、length()、toLowerCase()、toUpperCase()、substring()、equals()。 _java 多线程知识点_ 11. 抽象类是否必须有抽象方法...

    Java面试宝典2017pdf

    35. 将逗号分割的字符串转换成数组,可以使用String类的split方法。 36. 数组有length属性,String也有length()方法,但后者是一个方法调用。 37. 语句Strings="a"+"b"+"c"+"d"共创建了一个字符串对象。 38. try...

Global site tag (gtag.js) - Google Analytics