java - 如果定界符出现在给定索引之后,则仅根据定界符在 Java 中拆分字符串一次

标签 java regex string split

我一直在寻找基于定界符拆分字符串的单步过程,仅一次,仅当定界符出现在特定索引之后时。 例如。

输入:字符串--> my-city-hasa-dash, 分隔符--> "-", index --> "3"

虽然第一个定界符出现在第 3 个位置,但它不是 > 提供的索引。所以正则表达式应该查找下一次出现的定界符 > 索引并拆分仅一次

输出[]:{"mycity", "hasadash"}

输入:字符串--> m-ycityhasadash, 分隔符--> "-", index --> "3" delimeter 的索引小于提供的索引。所以不需要拆分。 输出[]:{“mycityhasadash”}

最佳答案

如果您使用的是 Java 8,您可以使用:

String[] output = Arrays.asList(
        str.replaceAll("^(.{0,2})-", "$1").split("-", 2))
        .stream()
        .map(x -> x.replace("-", ""))
        .toArray(String[]::new);

输出

my-city-hasa-dash - [mycity, hasadash]
m-ycityhasadash   - [mycityhasadash]

详情

  • str.replaceAll("^(.{0,2})-", "$1") 会替换前三个字符之前的所有-<
  • .split("-", 2) 将字符串拆分两次
  • .map(x -> x.replace("-", "")) 替换结果输出中的所有-
  • .toArray(String[]::new) 将结果收集到数组中

看看:

关于java - 如果定界符出现在给定索引之后,则仅根据定界符在 Java 中拆分字符串一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48550411/

相关文章:

java - Java ArrayList 的 (ArrayList).toString 的反转是什么?

java - 如何将循环递增 10 而不是 1?

java - 典型的java i18n流程——将资源文件发送给翻译公司进行翻译

javascript - 不同的语言对正则表达式的处理方式不同吗?

java - cos/sin/tan 的正则表达式,内部带有内括号

regex - Oracle 正则表达式尾随空格

java - 在JDK 1.6中,String的equals操作可以用==代替吗?

javascript - 如何从某个地方开始拆分字符串?

java - 相机 Intent 调用 onDestroy()

java - (Java) 需要帮助对整数组中的数字求和并将其应用于信用卡验证算法