- 浏览: 466248 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
ty1972873004:
sunwang810812 写道我运行了这个例子,怎么结果是这 ...
Java并发编程: 使用Semaphore限制资源并发访问的线程数 -
lgh1992314:
<div class="quote_title ...
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 903面向对象语言的一个强大的特性是多态,它可以用来在代码中移除 ... -
Java编程练手100题
2014-12-11 17:13 6730本文给出100道Java编程练手的程序。 列表如下: 面 ... -
数组复制的三种方法
2014-11-30 12:57 2214本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
数组复制的三种方法
2014-11-30 12:54 0本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
四种复制文件的方法
2014-11-29 13:21 1741尽管Java提供了一个类ava.io.File用于文件的操 ... -
判断一个字符串中的字符是否都只出现一次
2014-11-25 12:58 2724本篇博文将给大家带来几个判断一个字符串中的字符是否都只出现一 ... -
使用正则表达式判断一个数是否为素数
2014-11-23 13:35 2168正则表达式能够用于判断一个数是否为素数,这个以前完全没有想过 ... -
几个可以用英文单词表达的正则表达式
2014-11-21 13:12 3751本文,我们将来看一下几个可以用英文单词表达的正则表达式。这些 ... -
(广度优先搜索)打印所有可能的括号组合
2014-11-20 11:58 1954问题:给定一个正整n,作为括号的对数,输出所有括号可能 ... -
随机产生由特殊字符,大小写字母以及数字组成的字符串,且每种字符都至少出现一次
2014-11-19 14:48 3976题目:随机产生字符串,字符串中的字符只能由特殊字符 (! ... -
找出1到n缺失的一个数
2014-11-18 12:57 3176题目:Problem description: You h ... -
EnumSet的几个例子
2014-11-14 16:24 8749EnumSet 是一个与枚举类型一起使用的专用 Set 实现 ... -
给定两个有序数组和一个指定的sum值,从两个数组中各找一个数使得这两个数的和与指定的sum值相差最小
2014-11-12 11:24 3327题目:给定两个有序数组和一个指定的sum值,从两个数组 ... -
Java面试编程题练手
2014-11-04 22:49 6700面试编程 写一个程序,去除有序数组中的重复数字 编 ... -
Collections用法整理
2014-10-22 20:55 9846Collections (java.util.Collect ... -
The Code Sample 代码实例 个人博客开通
2014-09-04 18:48 1418个人博客小站开通 http://thecodesample. ... -
Collections.emptyXXX方法
2014-06-08 13:37 2145从JDK 1.5开始, Collections集合工具类中预先 ... -
这代码怎么就打印出"hello world"了呢?
2014-06-08 00:37 7398for (long l = 4946144450195624L ... -
最短时间过桥
2014-04-21 22:03 4145本文用代码实现最短时间过桥,并且打印如下两个例子的最小过桥时间 ... -
将数组分割成差值最小的子集
2014-04-20 22:34 2903本文使用位掩码实现一个功能 ==》将数组分割成差值最小的子集 ...
相关推荐
### 标题解读:“String.split()方法使用总结” 标题明确指出本文将围绕`String.split()`方法的使用进行深入探讨,旨在总结其功能、用法以及一些实践中的注意事项。这表明文章的目标读者是对Java编程有一定了解,...
在Java编程语言中,`String`类提供了许多用于操作字符串的方法,其中之一便是`split`方法。这个方法在处理文本数据时极为有用,特别是在需要根据特定的分隔符将字符串分割成多个子串的情况下。下面,我们将深入探讨`...
在用C++操纵字符串的时候,我一直使用很笨的遍历的方法。为此,我问候过很多次C++标准委员会。直到某一天,我做了一个处理绝对路径的题目。 首先,我要把‘/’作为分隔符,把输入字符串split一下。下面是我的代码:...
本文将详细介绍一种自定义的`split()`方法,该方法可以在PB环境中使用,帮助开发者轻松地将字符串按照指定的分隔符进行分割,并返回一个字符串数组。下面我们将从该方法的设计思路、参数说明、代码实现以及使用示例...
- **`split(String regex)`**:使用给定的正则表达式将此字符串分割成一个字符串数组。 ### 4. 字符串不可变性 `String`类的实例是不可变的,这意味着一旦创建了一个`String`对象,就不能更改它的内容。所有改变...
标题:“String类方法总结” 描述:“string类方法总结,由毕姥爷精心提炼,被誉为学习String类的必读经典。” **知识点详述:** 在Java编程语言中,`String`类是一个极其重要的类,用于处理文本数据。由于其不可...
总之,`String.split()`方法是Java中进行字符串切割的重要工具,正确理解和使用正则表达式转义规则是关键。在编写代码时,一定要注意特殊字符的处理,确保它们被正确地解析为分隔符,而不是正则表达式的一部分。同时...
### 有关Java String常用方法的总结 #### 一、String 类概述 `String`类是Java中最基础也是最重要的数据类型之一,在Java中被定义为一个不可变类(immutable class),这意味着一旦一个`String`对象创建之后,其...
本文将详细介绍如何使用JavaScript内置方法来实现数组与字符串之间的转换,其中涉及到了两个重要的字符串处理方法:toString方法和split方法。 首先,Array转为String。在JavaScript中,数组对象的toString方法可以...
#### 方法三:使用`TStringList`内置功能 除了自定义Split函数,Delphi还提供了`TStringList`类的内置方法来简化字符串分割过程,如`DelimitedText`属性。 ```pascal procedure TForm1.Button3Click(Sender: T...
`String`类提供了多种方法来处理字符串,其中`split`方法因其灵活性和强大的分割功能而被广泛使用。本文将深入探讨`split`方法的用法,并通过具体的例子帮助读者更好地理解和掌握这一知识点。 #### 二、`split`方法...
Java中的`split()`方法是String类的一个非常重要的成员函数,它用于将字符串按照指定的分隔符进行切割,返回一个字符串数组。这个方法在处理文本数据时尤其有用,例如解析CSV格式的数据、处理用户输入或者从日志文件...
代码如下:string str=”aaa|||bbb|||ccc”; string[] sArray=str.Split(new[] { “|||”... 您可能感兴趣的文章:C#中使用Split方法拆分字符串实例C#中使用split分割字符串的几种方法小结C# Split分隔字符串的应用(C#、s
Java的`split`方法是String类的一个非常重要的成员函数,用于根据指定的分隔符将字符串分割成多个子字符串,并返回一个字符串数组。这个方法在处理数据时非常有用,例如解析CSV格式的数据或者处理带有固定分隔符的...
这个`reverseWords`方法首先使用`split(' ')`将字符串按空格拆分成单词数组,然后对每个单词应用`split('')`、`reverse()`和`join('')`,最后使用`join(' ')`将单词重新组合成一个字符串,但单词顺序反转。...
总结来说,Java的`String.split()`方法在处理结尾空字符串时,可能因为默认行为而丢失这部分内容。为了避免这种情况,可以使用`split(regex, -1)`形式的重载方法,确保所有的子字符串,包括结尾的空字符串,都能被...
### String方法总结 #### Length():int 获取字符串长度 - **定义**:`length()` 方法用于获取当前字符串的长度。此方法返回的是一个整型值,表示字符串中字符的数量。 - **应用场景**:常用于需要知道字符串长度的...
这里,我们使用了 `Regex.Split` 方法,并且设置了 `RegexOptions.IgnoreCase` 参数来忽略大小写,从而正确地识别出 `"hello"` 并以此为界进行分割。 #### 总结 通过上述示例可以看出,`Split` 方法在处理字符串...
### PowerShell String对象方法详解 PowerShell作为一种强大的自动化和配置管理工具,在Windows系统管理及脚本编写中占有举足轻重的地位。其中,`String`对象是处理文本数据的基础,掌握其方法对于高效地管理和操作...