java - Java中根据出现次数分割字符串

标签 java regex

我想根据出现的次数拆分值。

  • 如果出现次数为 4
    例如key = A-B-C-D,答案应该是A,B,C,D

  • 如果出现次数超过4次
    例如key = A-B-C-D-E-F,答案应为 A-B-C,D,E,F

请在下面找到我的尝试:

String key = "A-B-C-D-E-F";
String[] res = key.split("(?<!^[^_]*)_");
System.out.println(Arrays.toString(res));

我的输出是A-B,C,D,E,F,但我的期望是A-B-C,D,E,F

同样,出现的次数根据使用情况而变化。分割时,我需要获得最多四个值。

请检查并告知我此事。

最佳答案

使用

//String key = "A-B-C-D";       // => [A, B, C, D]
String key = "A-B-C-D-E-F"; // => [A_B, C, D, E, F]
int keep = 3;
String[] res = key.split("-");
if (res.length > 4) {
    String first = String.join("-", Arrays.asList(res).subList(0, keep)); 
    List<String> lst = new ArrayList<>();
    lst.add(first);
    lst.addAll(Arrays.asList(res).subList(keep, res.length));
    res = new String[lst.size()];
    res = lst.toArray(res);
}
System.out.println(Arrays.toString(res));

请参阅IDEONE demo

基本上,我建议先拆分,然后检查我们有多少元素。然后,只需保留所需数量的第一个元素,然后将其与其余元素组合起来。

关于java - Java中根据出现次数分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36497613/

相关文章:

Java HashMap,一键多值,一张图

c - C 语言中的正则表达式使用函数 regcomp 和 regexec 在第一个和第二个匹配之间切换

ruby-on-rails - 使用 rspec 通过正则表达式检查标签的属性

javascript - 用对象中的值替换匹配的字符

java - 如何将 PDFBox.jar 集成到 Android 项目中?

java - GUI 对象在 Mac 上的 Java 中不显示

Java正则表达式特殊字符

c# - 使用正则表达式查找封装在[]中的项,然后替换它们

两个具体类之间的 Java 转换抽象

java - 长时间运行的线程+生命周期