java - 分割 "a{b}c{d}"的最佳方式

标签 java split

除了暴力方法之外,我正在努力分割

String str = "a{b}c{d}" 

进入

String[] arr;
arr[0] = "a"
arr[1] = "{b}"
arr[2] = "c"
arr[3] = "{d}"

想知道是否有比使用indexOf和subString更有效的方法

最佳答案

根据您当前的编辑,您似乎想要在以下位置进行拆分

  • 直接在 { 之前
  • 紧接}之后

在这种情况下,您可以使用 split支持regex(正则表达式)的方法。正则表达式提供lookaround

这样的机制
  • (?=subregex)看看我们是否直接位于可以通过 subregex 匹配的东西之前
  • (?<=subregex)看看我们是否直接可以匹配 subregex 的东西之后

还有{}被认为是正则表达式元字符(我们可以像 {m,n} 一样使用它们来描述像 a{1,3} 这样的重复数量,可以匹配 aaaaaa 但不能匹配 aaaa 或更多),因此为了使其成为正常的文字,我们需要像\{一样逃避它和\}

您需要的最后一件事是 OR运算符,表示为 | .

所以你的代码可以是这样的:

String str = "a{b}c{d}";
String[] arr = str.split("(?=\\{)|(?<=\\})"); // split at places before "{" OR after "}"
for (String s : arr){
    System.out.println(s);
}

输出:

a
{b}
c
{d}

演示:https://ideone.com/FdUbKs

关于java - 分割 "a{b}c{d}"的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50728745/

相关文章:

java - Jenkins 作为流程启动者

python - 如何在特定字符之前拆分字符串?

string - 在 Swift 中将字符串拆分为数组

java - Maven 冲突依赖 kafka-stream-test-utils 和 kafka-streams

java - 如何在 Payara Server 中禁用 HTTP OPTIONS 方法?

java - 将全局静态变量声明为 null 是一个好习惯吗?

java - 按分隔符分割 PDF?

r - 如何在R中将字符串拆分为规则间隔?

r - 根据 OID 按类别拆分数据帧

java - Tomcat 文件夹作为类路径?