java - 奇怪的分割方法

标签 java split

我对 split 方法有疑问。我想编写使用

调用 split 方法的程序

("a?b?gf#sad", "#?"),

它会返回

[a,?,b,?,gf,#,sad]

有人可以告诉我如何解决这个问题吗?非常感谢。

最佳答案

这个有点棘手,所以我要“用勺子喂”你。但我会证明我的推理。

首先,没有消耗任何输入的事实意味着正则表达式是零宽度匹配(因此不会消耗任何内容)。这意味着向前看和/或向后看。

其次,虽然您的输入示例远非详尽的示例,但似乎已在 ? 旁边完成了分割。或# .

将这两个事实放在一起给出了这个解决方案:

"a?b?gf#sad".split("(?<=[?#])|(?=[?#])");

以下是正则表达式的含义:

  • (?<=[?#])是一个后向断言,断言前一个字符是 ?#
  • (?=[?#])是一个预测,断言下一个字符是 ?#
  • A|B表示“A 或 B”,因此整个正则表达式是环视中的任何一个

这是一个测试:

System.out.println(Arrays.toString("a?b?gf#sad".split("(?<=[?#])|(?=[?#])")));

输出:

[a, ?, b, ?, gf, #, sad]

请注意,如果您想将拆分扩大为“任何非单词字符”(而不仅仅是 ?# ),您可以简单地将拆分正则表达式更改为 "(?<=\\W)|(?=\\W)"

关于java - 奇怪的分割方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10043465/

相关文章:

java - 套接字和数据输入流

java - 写入SD卡!安卓,txt数据

javascript - 分割包含选项的数据字符串

python - 创建列表后关闭文件 > text = open ("path/file.ext").read().split()

java - String.split 未按预期工作

java - Scala case 类 arity 限制和 jvm 254 限制

java - 使用 Java Web App 在浏览器中打开文件

java - Java中从多个类绘制到主类

javascript - 将两个单词拆分为变量

r - 如何在 R 中拆分数据集和绘图