Java 拆分最后一个空格为Max个字符的字符串

Java 拆分最后一个空格为Max个字符的字符串,java,string,split,Java,String,Split,我正在尝试拆分最后一个空格为最大允许字符的字符串: 期望值: 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();

我正在尝试拆分最后一个空格为最大允许字符的字符串:

期望值:

 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;
}
String name=“John David Guetta MarkHenry Anthoney Sam”

允许的最大字符数: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;
}
代码:

 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;
}
公共静态列表splitByLength(字符串str,int n){
List returnList=new ArrayList();
StringBuilder sb=新的StringBuilder();
对于(int i=0;i0&(i%n==0)){
添加(sb.toString());
sb=新的StringBuilder();
}
某人附加(str.charAt(i));
}
if(StringUtils.isNoneBlank(sb.toString())){
添加(sb.toString());
}
退货清单;
}

您可以使用最多可接受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 |$)
在空格上或到达初始字符串的结尾时中断。

您可以使用最多可接受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 |$)
在空格上或到达初始字符串的结尾时中断。

我总是发现使用正则表达式很困难和麻烦,因此这里有一个我将使用的解决方案

 private static void splitByLength(String str, int n) {
    String newStr = "";
    int splitIndex = 0;
    for (int i = 0; i < str.length(); i++) {
        if (str.charAt(i) != ' ') {     
            newStr = newStr + str.charAt(i);   //Keep adding chars until you find a space
            if (newStr.length() > n) {   //If newStr's length exceeds 'n', break the loop
                break;
            }
        } else {
            splitIndex = i;    //Store the last space index 
            newStr = newStr + ' ';
        }
    }
    System.out.println(str.substring(0, splitIndex).trim());  //Use the splitIndex to print a substring
    System.out.println(str.substring(splitIndex, str.length()).trim());
}
private静态void splitByLength(String str,int n){
字符串newStr=“”;
int-splitIndex=0;
对于(int i=0;in){//如果newStr的长度超过“n”,则中断循环
打破
}
}否则{
splitIndex=i;//存储最后一个空间索引
newStr=newStr+“”;
}
}
System.out.println(str.substring(0,splitIndex.trim());//使用splitIndex打印子字符串
System.out.println(str.substring(splitIndex,str.length()).trim());
}

我总是觉得使用正则表达式既困难又麻烦,所以这里有一个我将使用的解决方案

 private static void splitByLength(String str, int n) {
    String newStr = "";
    int splitIndex = 0;
    for (int i = 0; i < str.length(); i++) {
        if (str.charAt(i) != ' ') {     
            newStr = newStr + str.charAt(i);   //Keep adding chars until you find a space
            if (newStr.length() > n) {   //If newStr's length exceeds 'n', break the loop
                break;
            }
        } else {
            splitIndex = i;    //Store the last space index 
            newStr = newStr + ' ';
        }
    }
    System.out.println(str.substring(0, splitIndex).trim());  //Use the splitIndex to print a substring
    System.out.println(str.substring(splitIndex, str.length()).trim());
}
private静态void splitByLength(String str,int n){
字符串newStr=“”;
int-splitIndex=0;
对于(int i=0;in){//如果newStr的长度超过“n”,则中断循环
打破
}
}否则{
splitIndex=i;//存储最后一个空间索引
newStr=newStr+“”;
}
}
System.out.println(str.substring(0,splitIndex.trim());//使用splitIndex打印子字符串
System.out.println(str.substring(splitIndex,str.length()).trim());
}