java字符分割
来源:互联网 发布:淘宝上宝贝排名靠前 编辑:程序博客网 时间:2024/05/17 08:14
public String[] split(String regex) { return split(regex, 0);}
可以接受普通字符,也可以是正则表达式。
public String[] split(String regex, int limit) { /* fastpath if the regex is a (1)one-char String and this character is not one of the RegEx's meta characters ".$|()[{^?*+\\", or (2)two-char String and the first char is the backslash and the second is not the ascii digit or ascii letter. */ char ch = 0; if (((regex.value.length == 1 && ".$|()[{^?*+\\".indexOf(ch = regex.charAt(0)) == -1) || (regex.length() == 2 && regex.charAt(0) == '\\' && (((ch = regex.charAt(1))-'0')|('9'-ch)) < 0 && ((ch-'a')|('z'-ch)) < 0 && ((ch-'A')|('Z'-ch)) < 0)) && (ch < Character.MIN_HIGH_SURROGATE || ch > Character.MAX_LOW_SURROGATE)) { int off = 0; int next = 0; boolean limited = limit > 0; ArrayList<String> list = new ArrayList<>(); while ((next = indexOf(ch, off)) != -1) { if (!limited || list.size() < limit - 1) { list.add(substring(off, next)); off = next + 1; } else { // last one //assert (list.size() == limit - 1); list.add(substring(off, value.length)); off = value.length; break; } } // If no match was found, return this if (off == 0) return new String[]{this}; // Add remaining segment if (!limited || list.size() < limit) list.add(substring(off, value.length)); // Construct result int resultSize = list.size(); if (limit == 0) while (resultSize > 0 && list.get(resultSize - 1).length() == 0) resultSize--; String[] result = new String[resultSize]; return list.subList(0, resultSize).toArray(result); } return Pattern.compile(regex).split(this, limit); }
此方法,开始的地方说明了
- regex是单个字符,且不是”.$|()[{^?*+\”中的一个。
- regex是两个字符,第一个字符是转义字符,而且第二个字符不是ascii字符也不是ascii数字。
满足这两个条件就使用快速分割的方法分割字符串,即遍历一遍字符串,遇到regex代表的字符就分割上一个位置到这里,放到ArrayList中。
其中有几点注意的地方
- 如果字符串中没有所给字符,就返回整个字符串。
- 可以使用limit限制分割的次数,即返回结果的数组的size,当满足分割次数后,最后还没有进行分割的部分字符串完全返回。
- limit是0的时候,最后的结果不包含末尾的空字符,
if (limit == 0) while (resultSize > 0 && list.get(resultSize - 1).length() == 0) resultSize--;
产生空字符的原因是几个分隔符相邻,或者分隔符位于首尾,",foo,".split(",")
生成一个size为2的数组,",foo,".split(",", -1)
生成一个size是3的数组,最后一个元素为空字符串。
小常识:
a > 0, b > 0 则 a | b > 0
a > 0, b < 0 则 a | b < 0
a < 0, b > 0 则 a | b < 0
a < 0, b < 0 则 a | b < 0
符号位是1,则任有一方是负,结果就是负。
0 0
- java字符分割
- java分割字符
- 空格分割字符窜 java
- java split 分割特殊字符
- java String 分割 split 特殊字符
- java 用split分割的特殊字符
- Java分割字符split与StringTokenizer
- java分割字符串(特殊字符) split
- 分割字符
- 字符分割
- 字符分割
- 字符分割
- Java 中 使用 String.split 分割 字符串 成 字符数组
- JAVA分割字符串的方法需要注意的!转义字符
- java中用String.split()分割含有特殊字符的字符串
- 【Java】字符串以某特殊字符分割处理
- JAVA分割字符串的方法需要注意的!转义字符
- Java字符串split分割星号*等特殊字符问题
- C#实现SFTP文件传输
- 使用std::string 通过dll接口传递时,应该注意的问题
- 华为机试——删除一个字符串中出现次数最少的字符
- DML、DDL、DCL区别 .
- oracle impdp/expdp 的权限问题
- java字符分割
- 安卓弹出提示显示框
- java MVC
- 外牌年检车辆在上海办理年检
- Xcode7免证书真机调试
- Android studio 打包apk如何重命名apk名称
- android无限自动轮播图控件
- Linux的发展
- 蓝桥杯 历届试题 带分数