Java用split函数进行分割字符串

   在java中,咱们经常须要对字符串进行分割,使用split方法把字符串按照指定的分割符进行分割,而后返回字符串数组,下面是string.split的用法实例及注意事项:java

public class StringSplit {正则表达式

    public static void main(String[] args) {算法

        String sourceStr = "1,2,3,4,5";数组

        String[] sourceStrArray = sourceStr.split(",");ide

        for (int i = 0; i < sourceStrArray.length; i++) {性能

            System.out.println(sourceStrArray[i]);测试

        }this

        // 最多分割出3个字符串spa

        int maxSplit = 3;.net

        sourceStrArray = sourceStr.split(",", maxSplit);

        for (int i = 0; i < sourceStrArray.length; i++) {

            System.out.println(sourceStrArray[i]);

        }

    }

}

输出结果:

27191427_P4t0.jpg输出结果

split 的实现直接调用的 matcher 类的 split 的方法。在使用String.split方法分隔字符串时,分隔符若是用到一些特殊字符,可能会得不到咱们预期的结果。在正则表达式中有特殊的含义的字符,咱们使用的时候必须进行转义,示例:

public class StringSplit {

    public static void main(String[] args) {

        String value = "192.168.128.33";

        // 注意要加\\,要不出不来,yeah

        String[] names = value.split("\\.");

        for (int i = 0; i < names.length; i++) {

            System.out.println(names[i]);

        }

    }

}

split分隔符总结

1.字符"|","*","+"都得加上转义字符,前面加上"\\"。2.而若是是"\",那么就得写成"\\\\"。3.若是一个字符串中有多个分隔符,能够用"|"做为连字符。

好比:String str = "Java string-split#test",能够用Str.split(" |-|#")把每一个字符串分开。这样就把字符串分红了3个子字符串。

java.util.Tokenizer JDK 1.0 or later

StringTokenizer

StringTokenizer 类容许应用程序将字符串分解为标记。StringTokenizer 是出于兼容性的缘由而被保留的遗留类(虽然在新代码中并不鼓励使用它)。建议全部寻求此功能的人使用 String 的 split 方法或 java.util.regex 包。

代码示例

 

public class StringSplit {

    public static void main(String[] args) {

        String ip = "192.168.128.33";

        StringTokenizer token=new StringTokenizer(ip,".");  

        while(token.hasMoreElements()){  

         System.out.print(token.nextToken()+"  ");  

        } 

    }

}

可是StringTokenizer对于字符串"192.168..33"的分割,返回的字符串数组只有3个元素,对于两个分隔符之间的空字符串会忽略,这个要慎重使用。

可是String.split(String.split是用正则表达式匹配,因此不使用KMP字符串匹配算法)用的都是按顺序遍历的算法,时间复杂度O(m*n),较高,因此性能上,StringTokenizer好不少,对于频繁使用字符串分割的应用,例如etl数据处理,使用StringTokenizer性能能够提升不少。

小经验分享:

一、分隔符为“.”(无输出),“|”(不能获得正确结果)转义字符时,“*”,“+”时出错抛出异常,都必须在前面加必须得加"\\",如split(\\|); 
二、若是用"\"做为分隔,就得写成这样:String.split("\\\\"),由于在Java中是用"\\"来表示"\"的,字符串得写成这样:String Str="a\\b\\c"; 
转义字符,必须得加"\\"; 
三、若是在一个字符串中有多个分隔符,能够用"|"做为连字符,好比:String str="Java string-split#test",能够用Str.split(" |-|#")把每一个字符串分开;

使用String.split方法时要注意的问题

在使用String.split方法分隔字符串时,分隔符若是用到一些特殊字符,可能会得不到咱们预期的结果。

咱们看jdk doc中说明

public String[] split(String regex)

Splits this string around matches of the given regular expression.

参数regex是一个 regular-expression的匹配模式而不是一个简单的String,他对一些特殊的字符可能会出现你预想不到的结果,好比测试下面的代码:

用竖线 | 分隔字符串,你将得不到预期的结果

String[] aa = "aaa|bbb|ccc".split("|");
//String[] aa = "aaa|bbb|ccc".split("\\|"); 这样才能获得正确的字符串结果

 

用竖 * 分隔字符串运行将抛出java.util.regex.PatternSyntaxException异常,用加号 + 也是如此。

String[] aa = "aaa*bbb*ccc".split("*");
//String[] aa = "aaa|bbb|ccc".split("\\*"); 这样才能获得正确的字符串结果

 

显然,+ * 不是有效的模式匹配规则表达式,用"\\*" "\\+"转义后便可获得正确的字符串结果。

"|" 分隔串时虽然可以执行,可是却不是预期的目的,获得的是每一个字符的分割,而不是字符串,"\\|"转义后便可获得正确的字符串结果。

还有若是想在串中使用"\"字符,则也须要转义.首先要表达"aaaa\bbbb"这个串就应该用"aaaa\\bbbb",若是要分隔就应该这样才能获得正确结果:

String[] aa = "aaa\\bbb\\bccc".split("\\\\");


注意当用"."分隔的时候, 要用"[.]" 进行分隔!



PS:JAVA新手交流群:457036818,欢迎你们来交流JAVA相关问题

相关文章
相关标签/搜索