`
zhouYunan2010
  • 浏览: 207653 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类

String的spilt方法源码分析

阅读更多
/**
 * String 类得split方法解析。
 * 实际是调用Pattern类得split方法
 */
public class AboutSplit {
    public String[] split(String regex, int limit) {
    	return Pattern.compile(regex).split("本String字符串", limit);
    }
	/**
	 * 关于limit:limit决定数组的长度
	 * 当limit为0时数组长度不受限制,并且将剔除尾部空串
	 * 当limit为负时数组长度不受限制
	 * 当limit长度大于0,数组长度将<=limit,而且数组的最后一个元素将包含匹配符后面的所有字符
	 */
	public String[] split(CharSequence input, int limit) {
        int index = 0;
        boolean matchLimited = limit > 0;
        ArrayList<String> matchList = new ArrayList<String>();
        Matcher m = Pattern.matcher(input); //此pattern为Pattern.compile(regex)返回的Pattern对象

        // Add segments before each match found
        while(m.find()) {
            if (!matchLimited || matchList.size() < limit - 1) { //默认limit为0
                String match = input.subSequence(index, m.start()).toString();	//比如a:b:c,返回a。m.start()返回第一个匹配字符的索引即1
                matchList.add(match);	//存入List
                index = m.end();	//返回最后一个匹配字符的后一个字符的索引,这里是2
            } else if (matchList.size() == limit - 1) { // 最后一个元素
                String match = input.subSequence(index,
                                                 input.length()).toString();
                matchList.add(match);
                index = m.end();
            }
        }

        // 没有找到匹配串
        if (index == 0)
            return new String[] {input.toString()};

        // 把最后一部分的片段添加进来
        if (!matchLimited || matchList.size() < limit)
            matchList.add(input.subSequence(index, input.length()).toString());

        // Construct result
        int resultSize = matchList.size();
        if (limit == 0)	//如果limit为0
            while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
                resultSize--;	//剔除尾部空串
        String[] result = new String[resultSize];
        return matchList.subList(0, resultSize).toArray(result);
    }
}
分享到:
评论
1 楼 cumtlu 2011-10-16  

相关推荐

    c#中如何使用spilt分隔数据

    ### C#中使用Split方法分割字符串的多种技巧 在C#编程语言中,处理字符串是一项常见的任务。其中,`Split`方法是一种非常实用且高效的方式来根据特定的分隔符将字符串分割成数组。本文将详细介绍C#中使用`Split`...

    f_spilt函数.txt

    方便直接行列拆分,灵活运用SQL SERVER 函数,方便直接SQL语句调用函数,便于实现查询运用到存储过程当中。适合刚入门的小伙伴运用学习。

    Spilt_VDN设备预测方案实现培训.zip-LF_aa

    文件切分 $ split -b 200m VDN设备预测方案实现培训.zip Spilt_VDN设备预测方案实现培训.zip-LF_ 文件合并 $ cat Spilt_VDN设备预测方案实现培训.zip-LF_* &gt; VDN设备预测方案实现培训.zip

    Java中String常见问题

     str.spilt("\s+")  以上支持:空白字符""、换行" "、tab制表符" "、回车""。  3.拼接重复的字符串  3.1common类的stringutils工具方法  Stringstr="abcd";  Stringrepeated=StringUtils.repeat(str,3)...

    spilt_lcm.job.airgap.list1613011158574792136.lcmbiar-LF_aa

    $ split -b 210m lcm.job.airgap.list1613011158574792136.lcmbiar spilt_lcm.job.airgap.list1613011158574792136.lcmbiar-LF_ $ cat spilt_lcm.job.airgap.list1613011158574792136.lcmbiar-LF_* &gt; lcm.job.airgap...

    spilt_lcm.job.airgap.list1613011158574792136.lcmbiar-LF_ab

    $ split -b 210m lcm.job.airgap.list1613011158574792136.lcmbiar spilt_lcm.job.airgap.list1613011158574792136.lcmbiar-LF_ $ cat spilt_lcm.job.airgap.list1613011158574792136.lcmbiar-LF_* &gt; lcm.job.airgap...

    spilt_lcm.job.airgap.list1613011158574792136.lcmbiar-LF_ac

    $ split -b 210m lcm.job.airgap.list1613011158574792136.lcmbiar spilt_lcm.job.airgap.list1613011158574792136.lcmbiar-LF_ $ cat spilt_lcm.job.airgap.list1613011158574792136.lcmbiar-LF_* &gt; lcm.job.airgap...

    C++分离字符串

    首先,C++标准库提供了`std::getline`函数,用于从输入流(如`std::cin`或文件)中读取一行,然后`std::string`的`find`和`substr`方法可以用来根据特定分隔符分离字符串。例如,我们可以用空格作为分隔符,将一行...

    python 将list转成字符串,中间用符号分隔的方法

    本文将详细介绍如何使用Python将list转换成字符串,并在元素之间插入自定义分隔符的方法。 首先,Python中内置了一个非常方便的字符串方法`join()`,用于实现上述功能。`join()`方法接受一个可迭代对象作为参数,并...

    JavaScript Split()方法

    现在,我们详细分析一下 `split()` 方法的各种用法: 1. **使用普通字符作为分隔符**: - 如果你只需要用一个简单的字符作为分隔符,例如逗号 `,`,你可以直接将该字符传入 `split()` 方法。例如: ```javascript...

    Spilt_VDN设备预测方案实现培训.zip-LF_ab

    文件切分 $ split -b 200m VDN设备预测方案实现培训.zip

    Python计算指定日期是今年的第几天(三种方法)

    本文提供了三种不同的方法来实现这个功能。这些方法对于日常编程或者面试中遇到类似问题时都非常实用。 首先,我们来看第一种方法,通过字符串的`split()`方法来解析日期。例如,给定的日期字符串"2020-3-26"可以...

    split bregman

    ### 分裂布雷格曼方法在L1正则化问题中的应用 #### 一、引言与背景 近年来,L1正则化优化问题因其在压缩感知领域的突破性进展而备受关注。压缩感知技术允许从有限的数据量中重建图像和信号,这极大地推动了信号...

    keras model.fit 解决validation_spilt=num 的问题

    如下所示: hist = model.fit(x,y, epochs=epoch_num, batch_size=32,callbacks=early_stopping...Unrecognized keyword arguments: {‘validation_spilt’: 0.003} TIPS:当不清楚具体顺序的时候,可在进到类函数里

    python中从str中提取元素到list以及将list转换为str的方法

    - 对于Python3中处理字符串到十六进制的转换,以及`bytes`和`string`之间的互转,也有专门的转换方法和示例可供学习。 总的来说,`split()`和`join()`是Python中处理字符串和列表之间转换的核心方法,熟练掌握这两...

    oracle split函数

    本文将详细介绍两种在Oracle中实现字符串分割的方法:第一种是通过创建类型和管道函数的方式;第二种则是通过循环和子字符串处理实现的。 #### 二、第一种实现方式:创建类型和管道函数 ##### 1. 创建类型 `TY_STR...

    oracle_split_函数_返回数组

    这两种自定义函数可以帮助开发者将字符串按指定分隔符拆分成数组,从而进行后续的数据处理和分析。需要注意的是,由于PL/SQL语言的限制,这些方法可能不如Java或其他支持内置字符串处理函数的语言那么直接和高效,但...

    图像分割(matlab代码)

    在MATLAB中,我们可以利用各种算法来实现这一过程,以便于后续的分析、识别或处理。"spilt2.m" 文件很可能包含了执行图像分割的MATLAB代码。 在MATLAB中进行图像分割,通常会用到以下几种方法: 1. **阈值分割**:...

Global site tag (gtag.js) - Google Analytics