java - 当两个相等的字符相邻时,如何解释 Java 中字符串的 split()
问题描述
在文档中String.split
,
以下是示例。最后一个例子怎么解释?
例如,字符串“boo:and:foo”使用这些参数产生以下结果:
Regex Limit Result
: 2 { "boo", "and:foo" }
: 5 { "boo", "and", "foo" }
: -2 { "boo", "and", "foo" }
o 5 { "b", "", ":and:f", "", "" }
o -2 { "b", "", ":and:f", "", "" }
o 0 { "b", "", ":and:f" }
解决方案
仔细阅读文档:
此方法返回的数组包含此字符串的每个子字符串,这些子字符串由与给定表达式匹配的另一个子字符串终止或以字符串结尾终止。
请注意,空字符串是任何字符串的子字符串,包括boo:and:foo
. 如果你这样做"boo:and:foo".substring(2, 2)
,你会得到空字符串。前两个 o 之间的空字符串后跟(即“终止于”)子字符串“o”(第二个 o)。子字符串“o”匹配正则表达式“o”,因此空字符串满足要求:
由与给定表达式匹配的另一个子字符串终止或由字符串末尾终止
所以它被放入结果数组中。
倒数第二个 o 之后的空字符串也满足这个条件,并且最后一个 o 之后的空字符串“以字符串的结尾终止”。它们应该已经添加到数组中,并且数组看起来像:
{ "b", "", ":and:f", "", "" }
但是,它们会从数组中被丢弃,因为,
如果 [limit] 为零,则该模式将被应用尽可能多的次数,数组可以具有任意长度,并且尾随的空字符串将被丢弃。
“尾随空字符串”指的""
是数组中的最后两个元素,它们被丢弃。
推荐阅读
- sql-server - SQL 语法计算多个餐单 ID 中每个餐单 ID 的总菜单项
- android - 基于 mediarecorder 的 Camera2 应用程序录制低质量的视频。有人知道为什么吗?
- python - 在 Python 中将连接日期更改为日期时间
- php - Laravel 显示错误 App\Http\Controllers\UserController::admin_side_update() 的参数太少,通过了 1 个,预期正好有 2 个
- php - PhpStorm 代码检查允许在没有类型的对象上调用方法
- regex - Conditionals and regex doubts with grok filter in logstash
- json - Kafka Connect,获取 JsonConverter 的 Json Schema
- svg - 如何为 SVG 根元素设置渐变背景颜色?
- google-sheets - 如何在列表的最后一项下方添加一行
- c - 如何使用 SIMD 计算字符出现次数