关于java中split的使用
来源:互联网 发布:手机版淘宝闲鱼在哪里 编辑:程序博客网 时间:2024/05/16 01:02
- String
s2="this is ;a test" - String
sarray[]=s2.split("/s"); - System.out.println("sarray.length="+sarray.length);
这个输出是什么还是编译出错?我想那个split方法中的参数要是"s"的话,输出一定是4了,就是将原来字符串分成了数组{"thi","i","ate","t"},但是原题split方法中的参数要是"\s",那么这个参数到底是嘛意思呢,实验后输出结果居然是1。
原因还得深究啊。
其中stringObj是必选项,表示要被分解的 String 对象或文字。该对象不会被 split 方法修改。 separator为可选项,表示字符串或正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。limit 为可选项,该值用来限制返回数组中的元素个数。 值得注意的是: split 方法的结果是一个字符串数组,在 stingObj中每个出现 separator 的位置都要进行分解,separator 不作为任何数组元素的部分返回。
一个例子
- String
srcstring="this is ;a about split test" - String
stringarray[]=srcstring.split(" " ); - ////
在每个空格字符处进行分解 - for(String
stemp:stringarray){ -
System.out.println(stemp); - }
- String
srcstring1=" this ;//有n个空格的话,分成的数组长度为n+1is a about split test" - //如果字符串中有多个空格时,则两个空格间认为是没有字符,结果字符串数组中该位置为空。
- String
stringarray1[]=srcstring1.split(" " ); - for(String
stemp:stringarray1){ -
System.out.println(stemp); - }
这样输出结果为
- this
- is
- a
- about
- split
- test
-
- 另一个:
-
- this
-
- is
- a
- about
- split
-
- test
另外一个例子
- String
srcstring="this is ;a about split test" - String
stringarray[]=srcstring.split(" " ,2); - ////
在每个空格字符处进行分解 - for(String
stemp:stringarray){ -
System.out.println(stemp); - }
- 输出结果为
- this
- is
a about split test
- String
ipstring="59.64.159.224"; - String
iparray[]=ipstring.split("."); - for(String
stemp:iparray){ -
System.out.println(stemp); - }
- 这个输出为空,为什么呢?
因为 public string[] split(string regex) 这里的参数的名称是regex ,也就是 regularexpression (正则表达式)。这个参数并不是一个简单的分割用的字符,而是一个正则表达式,以下是split方法的实现代码:
split 的实现直接调用的 matcher 类的 split 的方法。我们知道,“ .”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。 只要将
- String
iparray[]=ipstring.split(".");
改为
- String
iparray[]=ipstring.split("\\.");
就可以了。
那么这里在列上一些转义字符
\t
\n
\r
\d
\D
\s
\S
\w
\W
\f
\e Escape
\b
\B
\G
注意:public String[] split(String regex,intlimit)根据匹配给定的正则表达式来拆分此字符串。
此方法返回的数组包含此字符串的每个子字符串,这些子字符串由另一个匹配给定的表达式的子字符串终止或由字符串结束来终止。数组中的子字符串按它们在此字符串中的顺序排列。如果表达式不匹配输入的任何部分,则结果数组只具有一个元素,即此字符串。
limit 参数控制模式应用的次数,因此影响结果数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1次,数组的长度将不会大于 n,而且数组的最后项将包含超出最后匹配的定界符的所有输入。如果 n为非正,则模式将被应用尽可能多的次数,而且数组可以是任意长度。如果 n为零,则模式将被应用尽可能多的次数,数组可有任何长度,并且结尾空字符串将被丢弃。
回到最初的题目,题目中给出的匹配正则表达式为"\s",表示空白字符,此时给定的字符串中没有匹配的字符,则输出为原字符串,所以输出的字符长度为1.
再附上一些关于java中正则表达式的知识吧
^
^java
$
java$
.
java..
加入特定限制条件「
[a-z]
[A-Z]
[a-zA-Z]
[0-9]
[0-9a-z]
[0-9[a-z]]
[]
[^a-z]
[^A-Z]
[^a-zA-Z]
[^0-9]
[^0-9a-z]
[^0-9[a-z]]
在限制条件为特定字符出现
J*
.*
J.*D
在限制条件为特定字符出现
J+
.+
J.+D
在限制条件为特定字符出现有
JA?
限制为连续出现指定次数字符「
J{2}
J{3}
文字
J{3,}
文字个以上,
J{3,5}
两者取一「
J|A
Java|Hello
「
比如,我查询
在使用
Pattern Pattern.compile(String regex, int flag)
flag
Pattern.CANON_EQ
Pattern.CASE_INSENSITIVE(?i)
Pattern.COMMENTS(?x)
Pattern.DOTALL(?s)
Pattern.MULTILINE
(?m)
Pattern.UNICODE_CASE
(?u)
Pattern.UNIX_LINES(?d)
抛开空泛的概念,下面写出几个简单的
◆
//
◆
Pattern pattern = Pattern.compile("[, |]+");
String[] strs = pattern.split("Java Hello World
for (int i=0;i
}
◆
Pattern pattern =Pattern.compile("
Matcher matcher =pattern.matcher("
//
System.out.println(matcher.replaceFirst("Java"));
◆
Pattern pattern =Pattern.compile("
Matcher matcher =pattern.matcher("
//
System.out.println(matcher.replaceAll("Java"));
◆
Pattern pattern =Pattern.compile("
Matcher matcher =pattern.matcher("
StringBuffer sbr = new StringBuffer();
while (matcher.find()) {
}
matcher.appendTail(sbr);
System.out.println(sbr.toString());
◆
String str="ceponline@yahoo.com.cn";
Pattern pattern =Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+",Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());
◆
Pattern pattern = Pattern.compile("<.+?>",Pattern.DOTALL);
Matcher matcher = pattern.matcher("
String string = matcher.replaceAll("");
System.out.println(string);
◆
Pattern pattern = Pattern.compile("href=\"(.+?)\"");
Matcher matcher = pattern.matcher("
if(matcher.find())
}
◆
//
Pattern pattern =Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");
Matcher matcher = pattern.matcher("dsdsdsfdf");
StringBuffer buffer = new StringBuffer();
while(matcher.find()){
System.out.println(buffer.toString());
}
◆
String str ="Java
String[][] object={new String[]{"\\{0\\}","1995"},newString[]{"\\{1\\}","2007"}};
System.out.println(replace(str,object));
public static String replace(final String sourceString,Object[]object) {
}
◆