- 浏览: 460169 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
ty1972873004:
sunwang810812 写道我运行了这个例子,怎么结果是这 ...
Java并发编程: 使用Semaphore限制资源并发访问的线程数 -
lgh1992314:
simpleDean 写道请问,Logger.setLevel ...
Java内置Logger详解 -
sunwang810812:
我运行了这个例子,怎么结果是这样的:2号车泊车6号车泊车5号车 ...
Java并发编程: 使用Semaphore限制资源并发访问的线程数 -
jp260715007:
nanjiwubing123 写道参考你的用法,用如下方式实现 ...
面试题--三个线程循环打印ABC10次的几种解决方法 -
cb_0312:
SurnameDictionary文章我没看完,现在懂了
中文排序
String对象的split方法提供了字符串分割的功能。split方法的参数可以是正则表达式,这样的话可以支持相对复杂的字符串分割。
比如:
"Welcome;to,the Java:World".split("[;|,| |:]")将得到由"Welcome" "to" "the" "Java"和"World"组成的字符串数组。
1. String对象的split方法里面采用了Pattern的split方法实现,所以,正则表达式中的某些符号需要正则转义才能得到正确的分割结果。
String(JDK 7)中的split源码如下:
public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; 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); } }
比如要想采用$ . |这三个符号分割字符串,需要进行转义才能得到正确的结果。
"Welcome.to.the.Java.World".split("\\."); "Welcome|to|the|Java|World".split("\\|"); "Welcome$to$the$Java$World".split("\\$");
2. 默认状态下,split处理后得到的子字符串数组会去掉后面的空子字符串的内容。
比如:
",,,,,,,".split(",")得到的数组长度是0.
"hello,Java,,,,,,".split(",")得到的数组长度是2.
这是由如下逻辑的代码实现的:
// 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);
3. 正确使用方法split(String regex, int limit),使用正确的limit值得到不一样的结果。
a): 如果想要得到的子字符串数组包含后面的空字符串,可以将limit设置为-1.
"hello,Java,,,,,,".split(",",-1)得到的数组长度为8
b): 如果limit设置的值大于分割得到子字符串长度,得到的数组与limit值等于-1的情况是一样的。
c): 用limit控制分割的范围。
比如,在文本文件中每行存储的内容格式如下:
编号,书名,描述
每行的内容用逗号隔开,其中描述的内容也可能有逗号,但是,我们并不想把描述这一项内容用逗号分割,这个例子中,我们可以将limit设置为3即可。
package my.string; public class StringSplitTest { public static void main(String[] args) { String[] array1 = "No.1,Java Programming,It is funny,and it is interresting.".split(",",3); printArray(array1); } private static void printArray(String[] array) { System.out.println("数组长度:"+array.length); for(String str: array) { System.out.println(str); } } }
输出内容如下:
数组长度:3
No.1
Java Programming
It is funny,and it is interresting.
另外,除了split方法,还可以用如下的方式实现:
1. 采用String Tokenizer实现
2. 采用indexOf与subString结合的方式实现
... ...
评论
3 楼
hailongshih
2013-08-28
谢谢你,细心问题,thanks
2 楼
MouseLearnJava
2013-08-28
hailongshih 写道
Good,收藏,但有个问题愿意跟lz探讨:
String str="hello,Java,,,,,,";
String[] strs = str.split(",",-1);
for (int i = 0; i < strs.length; i++) {
System.out.println(strs[i]);
}
在这里得到的strs数组长度为8,但是最后只打印出hello,我调试过发现其中java已经打印出来又收回,这是怎么回事
String str="hello,Java,,,,,,";
String[] strs = str.split(",",-1);
for (int i = 0; i < strs.length; i++) {
System.out.println(strs[i]);
}
在这里得到的strs数组长度为8,但是最后只打印出hello,我调试过发现其中java已经打印出来又收回,这是怎么回事
你好,产生你描述的行为,我想是这种情况引起的:你的console窗口高度太窄。
再运行一下程序试试,然后将console控制台输出窗口高度拉升一点或者将控制台输出窗口右边的滚动条拉至最顶部,你就可以看到输出的hello字符串了。
1 楼
hailongshih
2013-08-28
Good,收藏,但有个问题愿意跟lz探讨:
String str="hello,Java,,,,,,";
String[] strs = str.split(",",-1);
for (int i = 0; i < strs.length; i++) {
System.out.println(strs[i]);
}
在这里得到的strs数组长度为8,但是最后只打印出hello,我调试过发现其中java已经打印出来又收回,这是怎么回事
String str="hello,Java,,,,,,";
String[] strs = str.split(",",-1);
for (int i = 0; i < strs.length; i++) {
System.out.println(strs[i]);
}
在这里得到的strs数组长度为8,但是最后只打印出hello,我调试过发现其中java已经打印出来又收回,这是怎么回事
发表评论
-
工厂类中移除if/else语句
2016-07-10 19:52 850面向对象语言的一个强大的特性是多态,它可以用来在代码中移除 ... -
Java编程练手100题
2014-12-11 17:13 6670本文给出100道Java编程练手的程序。 列表如下: 面 ... -
数组复制的三种方法
2014-11-30 12:57 2178本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
数组复制的三种方法
2014-11-30 12:54 0本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
四种复制文件的方法
2014-11-29 13:21 1685尽管Java提供了一个类ava.io.File用于文件的操 ... -
判断一个字符串中的字符是否都只出现一次
2014-11-25 12:58 2655本篇博文将给大家带来几个判断一个字符串中的字符是否都只出现一 ... -
使用正则表达式判断一个数是否为素数
2014-11-23 13:35 2104正则表达式能够用于判断一个数是否为素数,这个以前完全没有想过 ... -
几个可以用英文单词表达的正则表达式
2014-11-21 13:12 3700本文,我们将来看一下几个可以用英文单词表达的正则表达式。这些 ... -
(广度优先搜索)打印所有可能的括号组合
2014-11-20 11:58 1917问题:给定一个正整n,作为括号的对数,输出所有括号可能 ... -
随机产生由特殊字符,大小写字母以及数字组成的字符串,且每种字符都至少出现一次
2014-11-19 14:48 3940题目:随机产生字符串,字符串中的字符只能由特殊字符 (! ... -
找出1到n缺失的一个数
2014-11-18 12:57 3116题目:Problem description: You h ... -
EnumSet的几个例子
2014-11-14 16:24 8708EnumSet 是一个与枚举类型一起使用的专用 Set 实现 ... -
给定两个有序数组和一个指定的sum值,从两个数组中各找一个数使得这两个数的和与指定的sum值相差最小
2014-11-12 11:24 3285题目:给定两个有序数组和一个指定的sum值,从两个数组 ... -
Java面试编程题练手
2014-11-04 22:49 6652面试编程 写一个程序,去除有序数组中的重复数字 编 ... -
Collections用法整理
2014-10-22 20:55 9799Collections (java.util.Collect ... -
The Code Sample 代码实例 个人博客开通
2014-09-04 18:48 1373个人博客小站开通 http://thecodesample. ... -
Collections.emptyXXX方法
2014-06-08 13:37 2104从JDK 1.5开始, Collections集合工具类中预先 ... -
这代码怎么就打印出"hello world"了呢?
2014-06-08 00:37 7355for (long l = 4946144450195624L ... -
最短时间过桥
2014-04-21 22:03 4073本文用代码实现最短时间过桥,并且打印如下两个例子的最小过桥时间 ... -
将数组分割成差值最小的子集
2014-04-20 22:34 2839本文使用位掩码实现一个功能 ==》将数组分割成差值最小的子集 ...
相关推荐
String.split()方法使用总结
在用C++操纵字符串的时候,我一直使用很笨的遍历的方法。为此,我问候过很多次C++标准委员会。直到某一天,我做了一个处理绝对路径的题目。 首先,我要把‘/’作为分隔符,把输入字符串split一下。下面是我的代码:...
主要介绍了Java中String.split()用法小结的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
代码如下:string str=”aaa|||bbb|||ccc”; string[] sArray=str.Split(new[] { “|||”... 您可能感兴趣的文章:C#中使用Split方法拆分字符串实例C#中使用split分割字符串的几种方法小结C# Split分隔字符串的应用(C#、s
从之前的章节中,我们知道PowerShell将一切存储在对象中,那这些对象中包含了一系列中的称之为方法的...另外一条途径,使用Split方法,对文件的完整名称进行分割,得到一个字符串数组,取最后一个元素,PowerShell中可
第一种方法: 代码如下:string s=abcdeabcdeabcde;...使用另一种构造方法对多个字符进行分割: 代码如下:string s=abcdeabcdeabcdestring[] sArray1=s.Split(new char[3]{c,d,e}) ;foreach(string i in sArray1
本文实例总结了C#中split用法。分享给大家供大家参考,具体如下: 以下是我转载的两个不同的人的,方便大家及自己查阅 string s=abcdeabcdeabcde; string[] sArray=s.Split(c); foreach(string i in sArray) ...
在JavaScript代码中使用正则表达式进行模式匹配经常会用到String对象和RegExp对象的一些方法,例如replace、match、search等方法,以下是对一些方法使用的总结。 String对象中支持正则表达式有4种方法,分别是:...
split定义和用法 split() 方法用于把一个字符串分割成字符串数组。 语法 stringObject.split(separator,howmany) 参数 描述 separator 必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。 howmany 可...
The awk function split(s,a,sep) splits a string s into an awk array a using the delimiter sep. set time = 12:34:56set hr = `echo $time | awk ‘{split($0,a,”:” ); print a[1]}’` # = 12set sec = `echo...
create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10)) returns @temp table(a varchar(100)) --实现split功能 的函数 --date :2003-10-14 as begin declare @i int set @SourceSql=rtrim...
在JavaScript代码中使用正则表达式进行模式匹配经常会用到String对象和RegExp对象的一些方法,例如replace、match、search等方法,下面所述是对相关方法使用的总结,需要的朋友参考下。 String对象中支持正则表达式...
修复建议:String的split方法传递的参数是正则表达式,正则表达式本身用到的字符需要转义,如:句点符号“.”,美元符号“$”,乘方符号“^”,大括号“{}”,方括号“[]”,圆括号“()” ,竖线“|”,星号“*”,...
我们在编程的时候经常会碰到字符串分割的问题,这里总结下,也方便我们以后查询使用。 一、用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串。 参数...
str_split( _string,length_ ) 实例 1 使用 length 参数: <?php print_r(str_split(Hello,3)); ?> 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢...
1引言 2语法 2.1脚本、命令和单词符号 2.2置换(substitution) 2.2.1变量置换(variable subtitution) 2.2.2命令置换(command substitution) 2.2.3反斜杠置换(backslash substitution) 2.2.4双引号和花括号 ...14总结
本文实例总结了Python数组遍历的简单实现方法。分享给大家供大家参考,具体如下: >>> os.__file__.split('\\') ['E:', 'Python', 'Python25', 'lib', 'os.pyc'] >>> os.path.split(os.__file__) ('E:\\Python\\...
split 方法; sqrt 方法; strike 方法; sub 方法; substr 方法; substring 方法; sup 方法; tan 方法; test 方法; toArray 方法; toDateString 方法; toExponential 方法; toFixed 方法; toGMTString ...
下面一一介绍一下: 1、最简单最常用的方法,以一个指定的字符进行的分割 打开vs... 输出下面的结果: ab deab deab de 2、使用多个字符进行分割 代码如下: string s=”abcdeabcdeabcde” string[] sArray1=s.Split(n