java - 使用最大字符数的最后一个空格分割字符串

标签 java string split

我正在尝试使用最大允许字符的最后一个空格来分割字符串:

期望:

字符串名称=“约翰·大卫·库塔·马克·亨利·安东尼·萨姆”;

允许的最大字符数:30

所以它应该返回为:

John David Guetta MarkHenry 
Anthoney Sam

实际结果:

 John David Guetta MarkHenry An
 thoney Sam

代码:

 public static List<String> splitByLength(String str, int n) {
    List<String> returnList = new ArrayList<>();
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < str.length(); i++) {
        if (i > 0 && (i % n == 0)) {
            returnList.add(sb.toString());
            sb = new StringBuilder();
        }

        sb.append(str.charAt(i));
    }
    if (StringUtils.isNoneBlank(sb.toString())) {
        returnList.add(sb.toString());
    }
    return returnList;
}

最佳答案

您可以使用最多接受 30 个字符的正则表达式:

String name = "John David Guetta MarkHenry Anthoney Sam";
Pattern p = Pattern.compile(".{1,30}(\\s+|$)");
Matcher m = p.matcher(name);
while(m.find()) {
  System.out.println(m.group().trim());
}

请注意 (\\s|$) 在空格处或到达初始字符串末尾时中断。

关于java - 使用最大字符数的最后一个空格分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46768101/

相关文章:

java - 如何在 swing 中将选定的对象从一个 JList 传输到另一个 JList?

javascript - 从字符串数组创建表,以便每个字符串都有自己的列,每行都是该字符串的一个字母

c++ - 为什么 <const char*> 和 <const char[]> 有非常不同的内存或指针行为?

javascript - 将字符串元素传递给数据键

java - 将 Java 代码拆分为 Token

java - 如何创建正则表达式来验证数字即使用连字符 (-) 分隔也不相同

java - Maven 包将依赖项中的 jar 添加到 jar

python - 如何以元组列表的形式处理查询参数?

emacs - 如何更改分屏 emacs 窗口的大小?

java - 为什么调用 CallStaticVoidMethod 在 JNI 中抛出使用无效的 jobject