`
234390216
  • 浏览: 10239225 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462917
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1776036
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398781
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395164
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:680181
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:531177
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1185095
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:468878
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151506
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68361
社区版块
存档分类
最新评论

字符串分割,你会吗?

    博客分类:
  • java
阅读更多

 

      对于字符串的分割主要有两种方式,使用Stringsplit方法和使用StringTokenizer。现在假设我们有一个字符串“||a|b||c|d|||”,然后我们需要使用“|”来对它进行分割。那么如下两段代码你觉得输出结果会是什么呢?

    public static void main(String args[]) {
        String str = "||a|b||c|d|||";
        String strArray[] = str.split("\\|");
        System.out.println(strArray.length);
        for (int i=0; i<strArray.length; i++) {
            System.out.println("strArray["+i+"] = " + strArray[i]);
        }
    }
 
    public static void main(String args[]) {
        String str = "||a|b||c|d|||";
        StringTokenizer tokenizer = new StringTokenizer(str, "|");
        int len = tokenizer.countTokens();
        System.out.println(len);
        while (tokenizer.hasMoreTokens()) {
            System.out.println(tokenizer.nextToken());
        }
    }

 

 

 

      正确答案是第一段代码会输出如下:

7
strArray[0] = 
strArray[1] = 
strArray[2] = a
strArray[3] = b
strArray[4] = 
strArray[5] = c
strArray[6] = d

 

 

 

      第二段代码输出如下:

4
a
b
c
d

 

       下面这段代码呢?

    public static void main(String args[]) {
        String str = "|||abcd||eacd|||";
        StringTokenizer tokenizer = new StringTokenizer(str, "|ab");
        int len = tokenizer.countTokens();
        System.out.println(len);
        while (tokenizer.hasMoreTokens()) {
            System.out.println(tokenizer.nextToken());
        }
    }

       输出如下:

3
cd
e
cd

 

      你答对了吗?接下来我们来解释一下为什么是上面的输出结果。

      Stringsplit方法分割

Stringsplit方法接收的参数是一个正则表达式,其底层调用的是正则表达式的split方法。Stringsplit方法源码是这样的:

 

    public String[] split(String regex, int limit) {
            return Pattern.compile(regex).split(this, limit);
    }

 

 

 

 

 

      而正则表达式Patternsplit方法是这样实现的:

    public String[] split(CharSequence input, int limit) {
        int index = 0;
        boolean matchLimited = limit > 0;
        ArrayList<String> matchList = new ArrayList<String>();
        Matcher m = matcher(input);
 
        // Add segments before each match found
        while(m.find()) {
            if (!matchLimited || matchList.size() < limit - 1) {
                String match = input.subSequence(index, m.start()).toString();
                matchList.add(match);
                index = m.end();
            } else if (matchList.size() == limit - 1) { // last one
                String match = input.subSequence(index,
                                                 input.length()).toString();
                matchList.add(match);
                index = m.end();
            }
        }
 
        // If no match was found, return this
        if (index == 0)
            return new String[] {input.toString()};
 
        // Add remaining segment
        if (!matchLimited || matchList.size() < limit)
            matchList.add(input.subSequence(index, input.length()).toString());
 
        // Construct result
        int resultSize = matchList.size();
        if (limit == 0)
            while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
                resultSize--;
        String[] result = new String[resultSize];
        return matchList.subList(0, resultSize).toArray(result);
    }

 

 

 

      当分割的字符串中含有分隔符时,注意这段代码:

        int resultSize = matchList.size();
        if (limit == 0)
            while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
                resultSize--;
        String[] result = new String[resultSize];
        return matchList.subList(0, resultSize).toArray(result);    

 

在没有限制分割数量的情况下,Pattern会把最末端为空串的元素都丢弃。所以当我们使用split方法以“|”为分隔符分割字符串||a|b||c|d|||”时将会把最后三个空元素丢弃,也就出现了上面的结果。

StringTokenizer分割

       StringTokenizer会把传递的分隔符拆分成一个个的字符,也就是char,然后会把每一个char都当成是一个分隔符。在进行字符串分割时会判断字符串的每一个字符是否在分隔符中,如果在则跳过这个字符,直到遇见不是分隔符的字符,然后把连续不是分隔符的字符组成一个串,如此往复。所以当我们使用“|”分割字符串"||a|b||c|d|||"时,StringTokenizer遇见分隔符“|”就跳过了,就会出现上述的结果。StringTokenizer的源码太多了我这里就不贴了,有兴趣的朋友可以自己去看。同样的道理,当我们使用“ab|”分割字符串“|||abcd||eacdf|||”时会把它分割成3个字符串,分别是“cd”、“e”、“cdf”。

 

2
0
分享到:
评论
2 楼 faradayroger 2017-01-10  
1 楼 Thomsonxu 2014-11-14  
好文章,学习了

相关推荐

    字符串分割

    在编程领域,字符串处理是一项基础且重要的任务,而...总之,字符串分割是数据处理的基础技能,无论你是初学者还是经验丰富的开发者,都需要熟练掌握这一技能。通过学习和实践,你将在处理文本数据时变得更加得心应手。

    delphi字符串分割示例源码

    使用这个函数,你可以轻松地处理任何需要字符串分割的场景。例如,如果你有一个逗号分隔的字符串`'apple,banana,orange'`,你可以这样使用`SplitString`: ```delphi var Fruits: TStrings; begin Fruits := ...

    delphi字符串按字符串分割

    在Delphi编程环境中,处理字符串是一项常见的任务,而“按字符串分割”是字符串操作中的一个核心功能。在Delphi中,我们可以使用内建的函数或类来实现这一操作,例如`SplitString`函数或者`TStringList`类。本文将...

    pb split() 字符串分割函数

    在这个场景中,我们关注的是一个名为"pb split()"的自定义字符串分割函数。在Python或者其他语言中,内置的`split()`函数可能不能满足所有需求,因此开发者有时会自定义类似功能的函数来适应特定项目或优化性能。 `...

    fortran分割字符串和字符串替换的子程序_Fortran_

    在编程领域,Fortran是一种历史悠久且广泛应用...通过这些自定义子程序,你可以灵活地在Fortran中执行字符串分割和替换操作,满足复杂的需求。理解并熟练掌握这些技巧,将使你在进行科学计算或数据处理时更加得心应手。

    Java分割字符串

    在本文中,我们将深入探讨如何使用Java进行字符串分割,以及涉及到的相关知识点。 ### 1. `split()`方法介绍 `split()`方法根据给定的正则表达式将字符串分割成数组。它的基本语法如下: ```java public String[] ...

    《Python 神器:自动分割字符串工具》

    你是否曾为繁琐的字符串分割工作而苦恼?现在,一款由 Python 编写的强大小工具闪亮登场!它能够根据你指定的字符,自动对字符串进行精准分割。无论你是数据分析师处理大量文本数据,还是程序员进行文本处理任务,这...

    C#字符串分割练习.zip

    在C#编程语言中,字符串...这个练习文件可能包含了各种不同的字符串分割实例,旨在帮助你巩固和提高这方面的技能。通过实践,你将更深入地理解如何根据具体需求来选择合适的分隔符和选项,以及如何处理可能出现的问题。

    rf.rar_RF 字符串截取_Rf字符串比较_rf字符串切割

    RF字符串切割通常指的是将一个字符串分割成多个子串。正则表达式中的特殊字符如`|`(或)、`( )`(分组)、`\s`(空白字符)等可以帮助我们根据特定规则切割字符串。比如,如果你想根据空格切割字符串`"Hello World"`,...

    VB拆分字符串,分隔字符串

    在这里,`inputString`是你想要拆分的原始字符串,`delimiter`是用于标识子字符串边界的字符或字符串。例如,如果你有一个逗号分隔的字符串,你可以这样拆分: ```vb Dim str As String = "苹果,香蕉,橙子" Dim ...

    java 分割字符串

    `split()`方法接受一个正则表达式作为参数,然后根据这个正则表达式将字符串分割成多个部分,并返回一个字符串数组。如果正则表达式匹配到的是空字符串,那么相邻的字符也会被分割。 ### 2. 使用示例 下面是一个...

    分割字符串函数 分割字符串函数

    在编程领域,分割字符串函数是处理文本数据时非常常用的一种工具。它允许我们将一个长字符串按照特定的分隔符...通过解压并查看这些文件,你可以进一步加深对字符串分割的理解,并练习在不同场景下如何运用这些函数。

    Sql in查询字符串分割工具

    《SQL IN查询字符串分割工具详解》 在数据库操作中,SQL查询是我们不可或缺的工具,而IN查询作为一种常用的操作方式,其灵活性和效率受到广大开发者的青睐。然而,当IN查询的参数数量庞大时,手动拼接字符串就显得...

    以任意指定的字符分割一个字符串,然后保存在字符串数组中

    无论你选择哪种编程语言,理解和熟练掌握字符串分割技巧都是非常重要的,因为这是处理和分析文本数据的基本步骤。在实际应用中,你可能会遇到更复杂的场景,比如处理多字符分隔符、忽略空格、处理转义字符等,这些都...

    delphi7分割字符串

    在Delphi 7中,处理字符串是编程过程中常见...了解了这些基础知识后,你就能在Delphi 7中灵活地处理各种字符串分割任务了。记得在实际项目中,根据需求选择最适合的方法,并进行适当的优化,以确保程序的稳定性和性能。

    work2_分割字符串_字符串处理_

    本文将深入探讨如何在各种编程语言中进行字符串分割以及一些基本的字符串运算,以帮助你更好地理解和应用这些技术。 首先,我们来关注“分割字符串”这一主题。字符串分割是将一个长字符串依据特定的分隔符切割成多...

    易语言分割字符串进制转换工具源码

    例如,你可以使用`字符串分割`命令,它接受三个参数:原始字符串、分隔符和返回结果的数组。这个命令会按照分隔符将字符串切分,并将结果保存到数组中。这对于处理文本数据,如日志文件、CSV格式的数据,或者解析...

    易语言分割字符串进制转换工具

    字符串分割通常涉及到`字符串分割`函数,它可以根据指定的分隔符将字符串切分成多个子串。例如,如果你有一个逗号分隔的数字列表,你可以使用该函数将其拆分成单独的数字字符串,然后再进行进制转换。 进制转换在...

    JS split() 分割字符串

    在JavaScript中,`split()`函数是一个非常实用的字符串方法,用于将一个字符串分割成多个子字符串,并返回一个字符串数组。这个方法是基于指定的分隔符来切割原始字符串的。在深入探讨`split()`之前,我们需要理解...

    Java 实例 - 字符串分割源代码-详细教程.zip

    这个详细教程应该包含了对Java字符串分割的全面介绍,从基本用法到高级技巧,帮助你更好地理解和运用这一功能。通过实践这些示例代码,你可以加深对Java字符串处理的理解,并能够灵活地解决实际编程问题。

Global site tag (gtag.js) - Google Analytics