按字符分割字符串

2024-06-19

scala 有一个标准的分割字符串的方法StringOps.split

但它的行为有点让我惊讶。

演示一下,使用快捷便利功能

def sp(str: String) = str.split('.').toList

以下表达式全部计算结果为 true

(sp("") == List("")) //expected
(sp(".") == List()) //I would have expected List("", "")
(sp("a.b") == List("a", "b")) //expected
(sp(".b") == List("", "b")) //expected
(sp("a.") == List("a")) //I would have expected List("a", "")
(sp("..") == List()) // I would have expected List("", "", "")
(sp(".a.") == List("", "a")) // I would have expected List("", "a", "")

所以我预计 split 会返回一个包含 (分隔符出现次数) + 1 个元素的数组,但显然情况并非如此。

与上面的差不多,但是删除了所有尾随的空字符串,但对于分割空字符串则不然。

我无法识别这里的模式。 StringOps.split遵循什么规则?

对于奖励积分,有没有一种好方法(无需太多复制/字符串附加)来获得我期望的分割?


出于好奇,您可以在这里找到代码。https://github.com/scala/scala/blob/v2.12.0-M1/src/library/scala/collection/immutable/StringLike.scala https://github.com/scala/scala/blob/v2.12.0-M1/src/library/scala/collection/immutable/StringLike.scala

请参阅以字符作为参数的 split 函数(第 206 行)。

我认为,这里发生的一般模式是,所有尾随的空分割结果都被忽略。

除了第一个之外,“如果没有找到分隔符,则仅发送整个字符串”逻辑正在被应用。

我正在尝试查找是否有有关这些的设计文档。

另外,如果您使用字符串而不是字符作为分隔符,它将回退到 java regex split。正如@LRLucena 所提到的,如果您提供的 limit 参数的值大于 size,您将得到尾随的空结果。看http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String,%20int) http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String,%20int)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按字符分割字符串 的相关文章

随机推荐

  • VR 视图 - 渲染:无法从 image.jpg 加载纹理

    我一直在尝试按照示例等在我的页面上设置 VR 视图https developers google com vr concepts vrview https developers google com vr concepts vrview 我
  • 显示带有背景颜色的百分比条

    例如 如果我有一个包含两列和 2 行的表 Col1 Percentage 50 50 70 70 如何用代表 COl1 值的颜色填充百分比列 像这样的东西 您可以使用具有两个紧接着的停止点的线性渐变 percentageFill heigh
  • 如何部署单页应用程序。用 ClojureScript / Figwheel 编写到静态服务器?

    我正在使用 Figwheel 并编写一个简单的单页应用程序 不需要任何服务器端智能 原则上 这个应用程序 可以放置在任何静态网络服务器上 但我如何实际部署它呢 看起来我的Figwheel 开发环境中的main js 正在设置figwheel
  • multiprocessing.Queue 中的 ctx 参数

    我正在尝试使用 multiprocessing Queue 模块中的队列 实施 https docs python org 3 4 library multiprocessing html exchang objects Between p
  • 批处理文件 FOR/f 扩展

    我有一个文件 directories txt 与目录名称 每个在一行上 我喜欢扩展该行 C Documents and Settings USERNAME My Documents 在我的脚本中以真实用户名运行脚本 然而 回声与线路完全相同
  • R:将 readRDS 应用于 .Rds 文件名的列表对象

    我有几个包含数据帧对象的 Rds 文件 我想对每个文件应用一个函数并将数据帧绑定到单个数据帧中 但是 当我尝试从文件名列表中读取多个 Rds 文件时 我收到错误 FUN X i 中的错误 从连接读取时出错 readRDS 不适用于列表吗 R
  • 使用服务总线触发器在 Azure 函数中参考配置中的主题和订阅名称

    我有一个带有服务总线主题触发器的 Azure 服务总线 我的功能看起来像这样 FunctionName SbListener public static async Task Run ServiceBusTrigger test topic
  • Nodemailer:从未收到问候语

    当尝试使用 Nodemailer 在 Node 内发送电子邮件时 https github com nodemailer nodemailer https github com nodemailer nodemailer 调用sendMai
  • 切换图片框可见性 C#

    为什么图片框控件的可见性属性在这里不起作用 我最初将它们设置为 false 以便在屏幕加载时它们不可见 但后来我想切换这个 我已完成以下操作 但似乎不起作用 这是一个 Windows 窗体应用程序 private void Action w
  • 使用会话在 Django 中将文件从一个视图传递到另一个视图

    我当前的工作项目要求我允许用户上传各种格式的文件 目前仅处理 CSV 格式 然后使用包含的数据来绘制图表Pandas http pandas pydata org 图书馆 我决定将图形渲染到模板的最简单方法是为图形创建特定视图 然后将图像从
  • Swift 相当于 Objective-C FourCharCode 单引号文字(例如 'TEXT')

    我正在尝试在 Swift 中复制一些 Objective C cocoa 一切都很好 直到我遇到以下情况 Set a new type and creator unsigned long type TEXT unsigned long cr
  • Python 在哪些系统上不使用 IEEE-754 双精度浮点数

    Python 对 IEEE 754 浮点运算进行了各种引用 但不保证1 https docs python org 3 tutorial floatingpoint html 2 https pythondev readthedocs io
  • 创建多个 git 分支的联合分支

    我希望能够在现有分支之上分层其他分支 并独立修改这些分支 这很有用 例如 允许将各个子项目的二进制文件统一到同一个项目中bin目录 一般来说 给定的文件仅存在于一层中 理想情况下 我想我会使用 unionfs 来完成此任务 但它必须以某种方
  • 方向改变时的类转换异常 (Android)

    我有一个由选项卡活动托管的活动 当我更改屏幕方向时 我的应用程序崩溃了 02 14 21 01 35 825 E AndroidRuntime 9424 java lang RuntimeException Unable to start
  • 动态选取框文本

    是否可以将列表视图的 java 编码中的文本添加到 Android 中的选取框滚动中 如果可以 请告诉我如何做 如果需要 我将发布使用的代码 这是列表视图使用的 XML 如下
  • 在 Spring Data JPA 中删除同一事务后插入

    使用 Spring Data JPA 我在同一事务内有下一个流程 REQUIRES NEW 使用此 Spring Data JPA 存储库方法删除一组用户的预测 Query value DELETE FROM TRespuestaUsuar
  • 如何以编程方式设置设备(UI)方向?

    希望屏幕 UI 上的所有内容都能够从横向左向右旋转 反之亦然 我该怎么做呢 这是私人的吗 我知道 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation inte
  • Notepad++保存时可以自动上传本地文件到服务器吗?

    我使用 Notepad 及其 NppFTP 插件 我需要保持本地副本最新 因此我编辑本地文件然后将它们上传到服务器 我想知道是否有一种方法可以让 Notepad 在保存文件后立即自动将文件上传到服务器 而无需按另一个按钮 我愿意使用其他 F
  • 处理过时的 NSURL 书签的正确方法是什么?

    从安全范围的书签解析 NSURL 时 如果用户已重命名或移动该文件或文件夹 则该书签将过时 苹果的文档对于陈旧性有这样的描述 isStale 返回时 如果是 则书签数据已过时 你的应用程序应该 使用返回的 URL 创建一个新书签并用它代替
  • 按字符分割字符串

    scala 有一个标准的分割字符串的方法StringOps split 但它的行为有点让我惊讶 演示一下 使用快捷便利功能 def sp str String str split toList 以下表达式全部计算结果为 true sp Li