关于split(String agrex)

2023-11-10

split(" ");
" a b c" 得到" ","a","b","c":
"  a b c"得到" "," ","a","b","c":前面的空格一个都不会省略。
"a  b c"得到"a"," ","b","c":中间空格省略一个。
后缀的空格全部省略。

不是以空格而是以某个String为划分依据时,现象相同。
split("a");
"aaab"得到" "," "," ","b"
"baab"得到"b"," ","b"

源码分析

public String[] split(CharSequence input [, int limit]) {
    int index = 0;                         // 指针
    boolean matchLimited = limit > 0;      // 是否限制匹配个数
    ArrayList<String> matchList = new ArrayList<String>();  // 匹配结果队列
    Matcher m = matcher(input);            // 待切割字符(串)匹配对象,pattern去哪了?

    // Add segments before each match found
    while(m.find()) {
        if (!matchLimited || matchList.size() < limit - 1) {  // 如果不限制匹配个数 或者 当前结果列表的大小小于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)  // 如果不限制匹配个数 或者 结果集大小小于限制个数
                                                    // 这个时候,后面已无匹配,如__1_1___,取最后一个1的后面部分
        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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于split(String agrex) 的相关文章

  • Java 中的 XPath 节点集

    我在 eclipse 中有这段代码 NodeSet nodes NodeSet xPath evaluate expression inputSource XPathConstants NODESET 它给我 NodeSet 上的编译时错误
  • 我需要在 Spring 中检查每个控制器中的有效会话吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设在 Spring Mvc 的 Web 应用程序中 我们是否需要检查每个控制器或 jsps 中的有效会话 我该如何解决 MVC 中的
  • Java程序中的数组奇怪的行为[重复]

    这个问题在这里已经有答案了 我遇到了这个 Java 程序及其以意想不到的方式运行 以下程序计算 int 数组中元素对之间的差异 import java util public class SetTest public static void
  • 解决错误:日志已在具有多个实例的atomikos中使用

    我仅在使用atomikos的实时服务器上遇到问题 在我的本地服务器上它工作得很好 我在服务器上面临的问题是 init 中出错 日志已在使用中 完整的异常堆栈跟踪 java lang RuntimeException Log already
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • 使用 ANTLR 为 java 源代码生成抽象语法树

    如何使用 ANTLR 从 java src 代码生成 AST 有什么帮助吗 好的 步骤如下 前往ANTLR站点 http www antlr org 并下载最新版本 下载Java g和JavaTreeParser g文件来自here htt
  • java中删除字符串中的特殊字符?

    如何删除字符串中除 之外的特殊字符 现在我用 replaceAll w s 它删除了所有特殊字符 但我想保留 谁能告诉我我该怎么办 Use replaceAll w s 我所做的是将下划线和连字符添加到正则表达式中 我添加了一个 连字符之前
  • 如何在 Java 中禁用 System.out 以提高速度

    我正在用 Java 编写一个模拟重力的程序 其中有一堆日志语句 到 System out 我的程序运行速度非常慢 我认为日志记录可能是部分原因 有什么方法可以禁用 System out 以便我的程序在打印时不会变慢 或者我是否必须手动检查并
  • Java 页面爬行和解析之 Crawler4j 与 Jsoup

    我想获取页面的内容并提取其中的特定部分 据我所知 此类任务至少有两种解决方案 爬虫4j https github com yasserg crawler4j and Jsoup http jsoup org 它们都能够检索页面的内容并提取其
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • 使用替换字符串中多个单词的最有效方法[重复]

    这个问题在这里已经有答案了 此刻我正在做 Example line replaceAll replaceAll cat dog replaceAll football rugby 我觉得那很丑 不确定有更好的方法吗 也许循环遍历哈希图 ED
  • 如何在 JFreeChart TimeSeries 图表上显示降雨指数和温度?

    目前 我的 TimeSeries 图表每 2 秒显示一个位置的温度 现在 如果我想每2秒显示一次降雨指数和温度 我该如何实现呢 这是我的代码 import testWeatherService TestWeatherTimeLapseSer
  • 制作java包

    我的 Java 类组织变得有点混乱 所以我要回顾一下我在 Java 学习中跳过的东西 类路径 我无法安静地将心爱的类编译到我为它们创建的包中 这是我的文件夹层次结构 com david Greet java greeter SayHello
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 如何在 Maven 中显示消息

    如何在 Maven 中显示消息 在ant中 我们确实有 echo 来显示消息 但是在maven中 我该怎么做呢 您可以使用 antrun 插件
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • 如何配置eclipse以保持这种代码格式?

    以下代码来自 playframework 2 0 的示例 Display the dashboard public static Result index return ok dashboard render Project findInv
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item

随机推荐

  • 使用replace(/.[\d]{3}Z/, ‘‘)报错 Replace this character class by the character itself.

    这个警告信息是由 ESLint 生成的 通常是在正则表达式中使用字符类而引起的 在你的代码中 使用了 d 3 Z 的正则表达式 它的作用是用空字符串替换掉字符串中的 Z 格式的子串 然而 由于字符类 中包含了只有一个字符的元素 ESLint
  • 华为OD机试 - 查找单入口空闲区域

    题目描述 给定一个 m x n 的矩阵 由若干字符 X 和 O 构成 X 表示该处已被占据 O 表示该处空闲 请找到最大的单入口空闲区域 解释 空闲区域是由连通的 O 组成的区域 位于边界的 O 可以构成入口 单入口空闲区域即有且只有一个位
  • Failed to create the java virtual machine解决办法

    1 原因 JAVA虚拟机报错 计算机的内存不足所致 还有一种说法是你的eclipse版本和虚拟机不兼容 2 解决方法 找到eclipse安装目录下的eclipse ini配置文件 打开 startup vm D Java jre6 bin
  • No module named 'tensorflow.contrib

    No module named tensorflow contrib 错误原因 解决方法 错误原因 这个错误可能是由 from tensorflow contrib learn python learn datasets import ba
  • 网络基础之网络层协议介绍(ping命令和ARP协议)

    文章目录 一 IP数据包格式 IP字段 二 ICMP协议 1 ICMP协议 Internet控制消息协议 2 ICMP协议的封装 3 ICMP的基本使用 Ping 4 跟踪路由路径命令 三 ARP协议 1 广播和广播域 2 ARP协议概述
  • stylecop4.0下载地址

    http soft city366 com version480 aspx
  • redis哨兵主从不切换_别找了!Redis主从模式和哨兵模式,这篇看完就足够了

    1 概述 一般的文档 都把redis的集群方式分成三种 主从 哨兵 集群 这里的集群只是广义集群的一种 但是这么分类很不严谨 哨兵模式 单独使用是没有意义的 哨兵的作用有两个 监控 监控主节点和从节点是否正常运行 提醒 当被监控的某个Red
  • Callable和Future原理解析

    首先进行分析前 我们需要了解到的概念 Callable是一个接口 是用于创建线程执行里面有一个call方法 用于线程执行的内容 由业务自己定义 Future也是一个接口 可以异步的通过get方法获取到call返回的内容 比较常见的使用场景
  • java如何声明公众类_类#是公共的,应在名为#.java的文件中声明

    classComplex privateintrealPart privateintimaginPart Complex this realPart 0 this imaginPart 0 Complex intrealPart intim
  • jdk-8u162 java安装

    linux下java环境配置 参照如下文章安装jdk https blog csdn net daerzei article details 80136457 1 上传jdk 8u162 文件 然后执行如下命令进行安装 安装完成之后设定环境
  • 边玩边学,15个学习Python 的编程游戏网站

    经常听到有朋友说 学习编程是一件非常枯燥无味的事情 其实 大家有没有认真想过 可能是我们的学习方法不对 比方说 你有没有想过 可以通过打游戏来学编程 今天我想跟大家分享几个网站 教你如何通过边打游戏边学编程 1 Coding Games 一
  • 力扣 289. 生命游戏

    虽然难度是中等但其实很简单 遍历矩阵判断每个点是死是活就可以了 进阶要求使用原地算法 即空间复杂度为O 1 所以我们不能简单的记录1是活 0是死 我规定 1 原来活 活变活 0 原来死 死变死 2 死变活 1 活变死 自己的 0ms cla
  • Windows Server 2012 R2 -DNS服务器安装与测试(VMware workstation环境)

    Windows Server 2012 R2 DNS服务器安装与测试 VMware workstation环境 搭建拓扑如下 DNS后缀名设置 DNS服务器 虚拟机 IP设置 DNS指向自己 物理机net8虚拟网卡IP设置 DNS指向DNS
  • Vivado 2018.3 安装步骤及 license 获取

    本文的主要内容是介绍 Vivado 2018 3 版本的安装步骤及其 license 的获取与加载 首先下载安装包 将其在没有中文的路径下解压 注意在解压前最好关闭电脑的杀毒软件 防止某些文件被拦截或者删除 解压完成后打开文件夹 在最底部双
  • Java多线程-并行处理以及事务控制

    1 为了提高我们接口的响应速度 我们可以开多个线程 并行处理 比如我们要大批量写入数据到数据库 Autowired private ThreadPoolExecutor executor Autowired private Platform
  • 六. HTTPS确保Web安全

    六 HTTPS确保Web安全 1 HTTP的缺点 通信使用明文 内容可能会被盗取 互连网中使用TCP IP协议族进行通信的过程中会经过非常多的通信载体 网关 路由器等 而这些主机并不可能完全是私人的 所以可能某个环节遭到恶意窥视 抓包 当然
  • Android 整合高德地图SDK实现 地图预览,定位,模拟导航

    一 准备工作 1 到高德地图官方网申请key 我的应用 高德控制台 2 申请key方法请参考 获取Key 创建工程 开发指南 Android 地图SDK 高德地图API 3 出现的问题 其中有一个获取SHA1的问题 E AmapErr 定位
  • Tracker 服务器地址大全 Tracker List

    https dns icoa cn tracker udp tracker tiny vps com 6969 announce https 1337 abcvg info announce https tracker fastdownlo
  • 【Linux系统编程(二)】Linux文件IO操作

    文章目录 Linux文件IO操作 1 系统调用 2 系统调用和库函数的区别 3 C库中IO函数工作流程 4 文件描述符 4 1 文件描述符表是如何管理文件描述符的呢 4 2 查看当前系统文件描述最大数量 5 文件IO的操作 5 1 open
  • 关于split(String agrex)

    split a b c 得到 a b c a b c 得到 a b c 前面的空格一个都不会省略 a b c 得到 a b c 中间空格省略一个 后缀的空格全部省略 不是以空格而是以某个String为划分依据时 现象相同 split a a