`
uuu999ggg
  • 浏览: 42576 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java split(转)

阅读更多
一道腾讯java笔试题

试题如下:

"|DF|A".split("|").length的结果是()

A 2  B 3  C 5  D 6

我知道String的split方法极容易出错,然而想不到的是这道题的答案竟然是D.

分析:

这道题的关键是String.split方法的参数是一个正则表达式字符串,split实际上调用的是:

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


而"|"这里不是简单的'|'字符,查阅Pattern类API就会知道:

"|"是正则表达式里的逻辑或运算符,它被编译后匹配的是其左右两边的任意一个字符串.举个例子来说

String[] arr = "a1b2cc1dd".split("1|2");//以1或者2分隔字符串
        
        System.out.println(arr.length);
        for(String s:arr){
            System.out.println(s);
        }


结果:
4
a
b
cc
dd



         //以空串或者空串分隔字符串,实际上是分隔每一个字符



        String[] arr = "a1b2cc1dd".split("|");
        
        System.out.println(arr.length);
        for(String s:arr){
            System.out.println(s);
        }


结果:
10
a
1
b
2
c
c
1
d
d
 



这道题到这里已经知道为什么要选择D了,但对于String.split方法我觉得更容易出问题的还在以下一些例子,请读者自己查看源码查找答案:

"|DF|A|||".split("[|]").length = 3

"||DF|A|||".split("[|]").length = 4

//关键看Pattern类源码



public String[] split(CharSequence input, int limit) {
        int index = 0;
        boolean matchLimited = limit > 0;
        ArrayList matchList = new ArrayList();
        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 (String[])matchList.subList(0, resultSize).toArray(result);
    }

 


转自http://yu.an.jin.5.blog.163.com/blog/static/53155811201099115435386/
分享到:
评论
1 楼 netwelfare 2015-04-06  
文章讲解的不详细啊,很多东西没有讲解出来。看到这篇文章讲解的挺详细的: java String.split()函数的用法分析

相关推荐

    JAVA_split_用法

    ### JAVA_split_用法详解 在Java编程语言中,`String`类提供了多个实用的方法来处理字符串,其中`split()`方法是用于将一个字符串分割成字符串数组的一种常见方式。此方法利用正则表达式(Regular Expression)作为...

    Javasplit.java

    文件目录转json格式

    Java中Split的用法及注意

    Java 中 Split 的用法及注意 Java 中的 Split 方法是通过正则表达式来拆分字符串的,它可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回。该方法的语法为 `stringObj.split(regex, [limit])`,其中 `...

    Java字符串分隔方法split实践

    `split()`方法位于`java.lang.String`类中,它的基本语法如下: ```java public String[] split(String regex) ``` 这里的`regex`参数是一个正则表达式,用于定义分隔字符串的规则。正则表达式是一种强大的文本...

    java中的split的用法

    ### Java中的split方法详解 #### 一、引言 在Java编程中,字符串处理是非常常见的需求之一。`String`类提供了多种方法来处理字符串,其中`split`方法因其灵活性和强大的分割功能而被广泛使用。本文将深入探讨`...

    java_spliter.zip_java split_java spliter_分割文件

    `split`函数是Java中用于字符串分割的关键方法,它接受一个正则表达式作为参数,返回一个字符串数组,其中每个元素都是原字符串根据正则表达式分割后的结果。在这个文件分割程序中,`split`可能不是直接用于字符串...

    java split()方法实用案例

    java split()方法实用案例

    java split()使用方法解析

    Java split() 函数使用方法解析 Java split() 函数是 Java 编程语言中一个非常常用的字符串分割函数,它可以将一个字符串按照指定的分隔符分割成多个子字符串,并将其存储在一个字符串数组中。下面我们将详细介绍 ...

    java的String[] split 示例

    在Java编程语言中,`String`类提供了许多用于操作字符串的方法,其中之一便是`split`方法。这个方法在处理文本数据时极为有用,特别是在需要根据特定的分隔符将字符串分割成多个子串的情况下。下面,我们将深入探讨`...

    java split用法详解及实例代码

    Java中的`split()`方法是String类的一个非常重要的成员函数,用于根据给定的正则表达式将一个字符串分割成多个子字符串,并返回一个字符串数组。这个方法在处理文本数据、解析配置文件或从复杂的字符串中提取信息时...

    java钱币小写转换大写

    String[] parts = amount.split("\\."); String integerPart = parts[0]; String decimalPart = parts.length &gt; 1 ? parts[1] : ""; StringBuilder result = new StringBuilder(); for (int i = integerPart....

    java数字转金额(任意金额、支持负数、前缀0)

    在Java编程中,将数字转换为金额格式是一项常见的任务,特别是在财务系统或者电子商务应用中。这个过程涉及到将数字转换成符合人类阅读习惯的货币格式,包括添加逗号分隔符,处理负数,以及在必要时添加前导零。本文...

    java多音字转拼音解决办法

    Java中的多音字转拼音是一项常见的任务,尤其是在处理中文文本时。多音字是指一个汉字有多个读音,根据不同的语境和组合可以有不同的发音。例如,“还”字就有“hái”和“huán”两种读音。在自然语言处理、语音...

    split this is a split java develop utils package

    标题提到的"split this is a split java develop utils package"很可能是指一个专门处理字符串分隔的Java工具包。这个包可能包含了用于解析、拆分和操作字符串的实用方法,对于日常开发工作非常有用。 描述中的...

    IPv6 Java方法 简写转成全写,全写转成简写

    #### 三、Java方法实现:简写转全写及全写转简写 ##### 1. 将非简写的IPv6转换成简写的IPv6 ```java public static String parseFullIPv6ToAbbreviation(String fullIPv6) { // 初始化返回结果 String ...

    浅析Java中Split函数的用法技巧

    Java中的`String.split()`方法是处理字符串的强大工具,它能够根据指定的分隔符将一个字符串分割成多个子字符串,并将这些子字符串存储在一个数组中。这个方法在处理文本数据时非常常见,尤其是在解析CSV格式的数据...

    java 实现 金额转成中文大写形式

    在Java编程中,将金额的阿拉伯数字转换为中文汉字大写是常见的财务处理需求,主要用于防止数字篡改,增加财务数据的安全性和准确性。这个过程通常称为金额数字化,它涉及到将小数点、整数和小数部分分别转换,并且...

    input_input().split()_input_split_mapReduce_java_

    在进行map计算之前,mapreduce会根据输入文件计算输入分片(input split),每个输入分片(input split)针对一个map任务,输入分片(input split)存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组...

    java 中用split分割字符串,最后的空格等不被拆分的方法

    在Java编程语言中,`split()` 是一个非常实用的字符串方法,它允许我们将字符串按照指定的分隔符进行拆分。然而,在某些情况下,当分隔符是空格或者制表符(\t),并且字符串末尾有连续的空格或制表符时,`split()` ...

    split_split_split初级_分割转换函数_

    在Python中,`split()`函数是内置的字符串方法,而在其他语言如C++或Java中,可能需要通过特定的库函数或自定义方法来实现类似功能。在Python的例子中,`split(separator)`接受一个参数,即作为分隔符的字符串,返回...

Global site tag (gtag.js) - Google Analytics