• String类的split方法


    对于Strig类的这个split方法,碰到过多次,参考了很多网上的资料,现在整理总结一下

    1:split函数第二个参数的用法

    在论坛上看到了一个问题,然后兴起了对这个函数进一步探究的兴趣:

    首先,使用只有一个参数的split:

    1. public class SplitTest {   
    2.     /** 
    3.      * @param args 
    4.      */  
    5.     public static void main(String[] args) {  
    6.         String str = "what,is,,,,that";  
    7.         String[] strs = str.split(",");  
    8.         System.out.println(strs.length);  
    9.     }  
    10.   
    11. }  

    输出结果是6;但是,如果字符串变为
    1. "what,is,,,,"呢?看起来应该是5,其实不然,对用只有一个参数的函数split,输出结果是2  
    1. 测试代码:  
    1. <pre name="code" class="java">public class SplitTest {  
    2.   
    3.     /** 
    4.      * @param args 
    5.      */  
    6.     public static void main(String[] args) {  
    7.         String str = "what,is,,,,";  
    8.         String[] strs = str.split(",");  
    9.         System.out.println(strs.length);  
    10.     }  
    11.   
    12. }  

    问题来了,如何将

    1. "what,is,,,,";  
    2.           

    这个字符串按照逗号分隔,并且逗号之间没有内容的就存储为空呢?

    很简单,用第二个split函数,将第二个参数设置为-1就可以了,测试代码如下:

    1. public class SplitTest {  
    2.   
    3.     /** 
    4.      * @param args 
    5.      */  
    6.     public static void main(String[] args) {  
    7.         String str = "what,is,,,,";  
    8.         String[] strs = str.split(",", -1);  
    9.         System.out.println(strs.length);  
    10.     }  
    11.   
    12. }  
    结果为6;

    那么后边的这个int类型的参数是干么用的?很简单,设定利用split函数截取字符串,截取的结果的阀值。-1表示无限制,虽然直接用只有一个参数的split函数也是无限制,但是那样的话,后面如果分隔符之间为空的话,就不会截取。

    二 split方法技巧点

       

    java.lang包中有String.split()方法返回是一个字符型数组,但使用过程中还有一些小技巧。

    如执行:"2|33|4".split("|")

    出来的结果是:

    ""

    2

    |

    3

    3

    |

    4

    奇怪吧,不过注意看一下API说明还是知道原因的.

     

    java.lang.string.split 

    split 方法 

    将一个字符串分割为子字符串,然后将结果作为字符串数组返回。 

    stringObj.split([separator[limit]]) 

    参数 

    stringObj 

    必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。 

    separator 

    可选项。字符串或正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。 

    limit 

    可选项。该值用来限制返回数组中的元素个数。

    说明 

    split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解

     

     

    所以正常的写法是这样的:

    1、如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");

    2、如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");

    .”和“|”都是转义字符,必须得加"\\";(这里是利用了java中正则表达式的一个点)

    3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“a=1 and b =2 or c=3”,把三个都分隔出来,可以用String.split("and|or");


    三 字符串反转遇到问题引出来的

    题目如下:

    String str = " i am  a  programmer";其中空格个数分别是123

    要求按照单词反转,也就是最后输出“programmer   a  am   i"; 空格数分别为321

     

    1:用split函数方式:

    1. public static void reverse() {  
    2. String s = "i am  a   programmer"// 几个空格的数量分别为123  
    3. String[] eg = s.split(" ", -1);  
    4. String result = "";  
    1. for (int i = eg.length - 1; i > 0; i--) {  
    1.   result += eg[i] + " ";  
    2. }  
    3. result += eg[0]; // 这里要注意第一个字符的前面是不能增加空格的。否则就多了一个空格,所以从后面往前面遍历
    4. System.out.println(result);  

            这里一直有一个模糊点,就是如果对于连续多个空格在一起,但是要求分割的时候只用一个空格,其它的空格还不能删除,到底怎么办?需要看看split函数是怎么处理的。为了可视,将空格换作”,“。


    1. String oldStr = "z,,,z";  
    2.         String[] strs = oldStr.split(",");  
    3.         for(String str:strs) {  
    4.             System.out.println(str);  
    5.         }  

    可以改变字符串之间的”,“的个数来查看,从运行结果可以看到,在分割字符串”z,,,z“时,首先把字符串分为”z“和”,,z“两个字符串,第二步操作字符串”,,z“,分为一个空字符串和”,z“字符串,继续分为一个空字符串和一个z,最后结果如下:中间两行是null

    z

     

     

    z

     

    2:不用split函数:

    1.         String oldstr="I am  a   programmer";  
    2.         int index = oldstr.lastIndexOf(" ");  
    3.         System.out.println(index);  
    4.         while (index >= 0) {  
    5.             System.out.print(oldstr.substring(index + 1) + " ");  
    1.             oldstr = oldstr.substring(0,index);  
    1.             index = oldstr.lastIndexOf(' ');  
    1.         }  
    2.           
    1.         System.out.println(oldstr);  

    为了能清楚的看到运行结果,我们把空格换为“,”。

    viewplainprint?

    1. String oldstr="I,am,,a,,,programmer";  
    1.         int index = oldstr.lastIndexOf(",");  
    2.         while (index >= 0) {  
    3.             System.out.print(oldstr.substring(index + 1) + ",");  
    4.             oldstr = oldstr.substring(0,index);  
    1.             index = oldstr.lastIndexOf(',');  
    2.             System.out.println(index);  
    3.         }  

    这样的话,里面有两点如果不清楚的话就会导致不理解,首先subString(index)方法,是值从第index个字符开始往后的字符串。第二subString0index)的字符串不包括index位的字符。


  • 相关阅读:
    linux下php环境的装配以及php storm的链接
    p4 : a problem about "./behavioral-model"
    p4factory下 targets/basic_rout
    P4安装
    第二次结对编程作业——毕业导师智能匹配
    初识GIT
    结对项目之需求分析与原型设计
    调研《构建之法》指导下的全国高校的历届软工实践作品、全国互联网+竞赛、物联网竞赛等各类全国性大学生信息化相关的竞赛平台的历届作品及其看法
    SDN 收集一下最近的资料
    软件工程的实践项目课程的自我目标
  • 原文地址:https://www.cnblogs.com/allenzhaox/p/3201828.html
Copyright © 2020-2023  润新知