Java中split的用法

来源:互联网 发布:java 日志输出到文件 编辑:程序博客网 时间:2024/05/29 11:42

简介

Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回字符串数组

下面是string.split的用法实例及注意事项:
java.lang.string.split 
split方法 将一个字符串分割为子字符串,然后将结果作为字符串数组返回。
stringObj.split([separator,[limit]]) 
stringObj 必选项要被分解的 String 对象或文字,该对象不会被split方法修改。
separator 可选项。字符串或正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。

如果忽略该选项,返回包含整个字符串的单一元素数组。 

limit 可选项。该值用来限制返回数组中的元素个数(也就是最多分割成几个数组元素,只有为正数时有影响)
           split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解。
            separator不作为任何数组元素的部分返回。

示例

示例1:

      String str="Java string split test";      String[] strarray=str.split(" ");      for (int i = 0; i < strarray.length; i++)          System.out.println(strarray[i]);


将输出:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. Java  
  2. string  
  3. split  
  4. test  

示例2:    

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. String str="Java string split test";  
  2. String[] strarray=str.split(" ",2);//使用limit,最多分割成2个字符串  
  3.       for (int i = 0; i < strarray.length; i++)  
  4.           System.out.println(strarray[i]);  

将输出:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. Java  
  2. string split test  

示例3:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. String str="192.168.0.1";  
  2. String[] strarray=str.split(".");  
  3.       for (int i = 0; i < strarray.length; i++)  
  4.           System.out.println(strarray[i]);  

结果是什么也没输出,

将split(".")改为split("//."),将输出正确结果:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. 192  
  2. 168  
  3. 0  
  4. 1  

源码 

让我们来看看 split 方法的方法源码吧: 
public string[] split(string regex) 
这里的参数的名称是 regex ,也就是 regular expression (正则表达式)。这个参数并不是一个简单的分割用的字符,而是一个正则表达式,看split 方法的实现代码就更坚定了我们的信心: 
public string[] split(string regex, int limit) { 
return pattern.compile(regex).split(this, limit); 

split 的实现直接调用的 matcher 类的 split 的方法。读者已经知道,“ . ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。 
只要将 String[] names = value.split("."); 改为 String[] names = value.split("\\."); 就可以了。 
输出结果: 

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. 192   
  2. 168   
  3. 128   
  4. 33   

Java帮助文档

再加一点儿补充(这是Java帮助文档中的,更清晰一些): 
public String[] split(String regex,int limit)根据匹配给定的正则表达式来拆分此字符串。 
此方法返回的数组包含此字符串的每个子字符串,这些子字符串由另一个匹配给定的表达式的子字符串终止或由字符串结束来终止。数组中的子字符串按它们在此字符串中的顺序排列。如果表达式不匹配输入的任何部分,则结果数组只具有一个元素,即此字符串。 
limit 参数控制模式应用的次数,因此影响结果数组的长度。如果该限制 n 大于 0,则模式将被最多应用n - 1次,数组的长度将不会大于 n,而且数组的最后项将包含超出最后匹配的定界符的所有输入。如果 n 为非正,则模式将被应用尽可能多的次数,而且数组可以是任意长度。如果 n 为零,则模式将被应用尽可能多的次数,数组可有任何长度,并且结尾空字符串将被丢弃。 

例如,字符串 "boo:and:foo" 使用这些参数可生成下列结果: 
Regex  Limit                结果 

   :          2             { "boo", "and:foo" } 
   :          5             { "boo", "and", "foo" } 
   :         -2            { "boo", "and", "foo" } 
   o         5             { "b", "", ":and:f", "", "" } 
   o         -2            { "b", "", ":and:f", "", "" } 
   o         0             { "b", "", ":and:f" } 

这种形式的方法调用 str.split(regex, n) 产生与以下表达式完全相同的结果: 
Pattern.compile(regex).split(str, n) 

参数: 
regex - 定界正则表达式 
limit - 结果阈值,如上所述 
返回: 字符串数组,根据给定正则表达式的匹配来拆分此字符串,从而生成此数组 
抛出: PatternSyntaxException - 如果正则表达式的语法无效 
从以下版本开始: 
1.4 
public String[] split(String regex)根据给定的正则表达式的匹配来拆分此字符串。 
该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,结果数组中不包括结尾空字符串。 
例如,字符串 "boo:and:foo" 产生带有下面这些表达式的结果: 
Regex                 结果 
   :            { "boo", "and", "foo" } 
   o            { "b", "", ":and:f" } 

参数: regex - 定界正则表达式 
返回: 字符串数组,根据给定正则表达式的匹配来拆分此字符串,从而生成此数组。 
抛出: PatternSyntaxException - 如果正则表达式的语法无效

经验分享

1、分隔符为“.”(无输出),“|”(不能得到正确结果)转义字符时,“*”,“+”时出错抛出异常,都必须在前面加必须得加"//",如split(//|);
2、如果用"/"作为分隔,就得写成这样:String.split("////"),因为在Java中是用"//"来表示"/"的,

字符串得写成这样:String Str="a//b//c";转义字符,必须得加"//";
3、如果在一个字符串中有多个分隔符,可以用"|"作为连字符,比如:String str="Java string-split#test",可以用Str.split(" |-|#")把每个字符串分开;

应用

字符串变形

对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形。首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把着个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。比如"Hello World"变形后就变成了"wORLD hELLO"

输入描述:

给定一个字符串s以及它的长度n(1≤n≤500)

输出描述:
请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。
输入例子:
"This is a sample",16
输出例子:
"SAMPLE A IS tHIS"

参考代码:
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. import java.util.*;  
  2.    
  3. public class Transform {  
  4.     public String trans(String s, int n) {  
  5.         String newstr=new String();  
  6.         for(int i=0;i<n;i++)  
  7.        {   
  8.             if(s.charAt(i)==' ')  
  9.                 {  
  10.                 newstr+=" ";  
  11.                 }  
  12.             else  
  13.             {  
  14.                 if(Character.isUpperCase(s.charAt(i)))  
  15.                     newstr+=Character.toLowerCase(s.charAt(i));  
  16.                 else  
  17.                     newstr+=Character.toUpperCase(s.charAt(i));  
  18.             }  
  19.         }  
  20.         String[] str=newstr.split(" ");  
  21.         newstr=new String();  
  22.         if(s.charAt(s.length()-1)==' ')  
  23.             newstr+=" ";  
  24.         for(int i=str.length-1;i>=0;i--)  
  25.         {  
  26.             newstr+=str[i];  
  27.             if(i!=0)  
  28.                 newstr+=" ";  
  29.         }  
  30.         return newstr;  
  31.     }  
  32. }  
1 0
原创粉丝点击