java - 如何将 Java 字符串分成两个,其中第一个子字符串不超过 x 并以整个单词结尾
问题描述
我不知道将一个字符串分成 2 个子字符串。第一个子字符串的长度不应超过 35,并且应以单词的结尾结尾。因此,如果 35 限制落在单词中间,则在该单词开始时断开字符串(假设在 32 上)。我的意思是任何非空格字符的组合。单词以空格分隔。第二个子字符串可以是任意长度,因此应该以单词开头。字符串总是大于 35 并且没有模式。我该如何实施?提前致谢!
例子:
“Lordem ipsum dolor sit amet, $200 cons (35 chars until here)ectetur adipiscing elit, №22sed 70 % do eiusmod tempor incididunt ut labore et dolore magna aliqua。Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat。”
这是一个长字符串。然后我需要获取字符串:("Lordem ipsum dolor sit amet, $200"
少于 35 个并在单词结束的地方结束),其余的进入一个单独的大子字符串
解决方案
您可以使用 StringTokenizer:
import java.util.Arrays;
import java.util.StringTokenizer;
public class Test {
public static void main(String[] args){
String str = "Lordem ipsum dolor sit amet, $200 cons(35 chars until here)ectetur adipiscing elit, №22sed 70 % do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.";
StringTokenizer strToken = new StringTokenizer(str," ",true);
String first = "";
String second = "";
while(strToken.hasMoreTokens()){
String next = strToken.nextToken();
if((first+next).length() < 35){
first += next;
}
else{
break;
}
second = str.substring(first.length());
}
System.out.println(first);
System.out.println(second);
}
}
或者,如果您使用的是 java 9 或更高版本并想尝试流:
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
public class Test {
public static void main(String[] args){
String str = "Lordem ipsum dolor sit amet, $200 cons(35 chars until here)ectetur adipiscing elit, №22sed 70 % do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.";
//split at space and keep delimiters
String[] splited = str.split("((?<= )|(?= ))");
AtomicInteger ai = new AtomicInteger(0);
String f = Arrays.stream(splited).takeWhile(i -> ai.addAndGet(i.length()) < 35).collect(Collectors.joining());
AtomicInteger bi = new AtomicInteger(0);
String s = Arrays.stream(splited).dropWhile(i -> bi.addAndGet(i.length()) < 35).collect(Collectors.joining());
System.out.println(f);
System.out.println(s);
}
}
推荐阅读
- java - 我是否必须更改我的代码才能使用扫描仪才能使 inputmismatch 异常起作用?
- laravel - Dompdf 不会在 laravel 中加载报告
- c# - 如何使用 Neo4jClient 将 C# DateTime 存储为 Neo4j DATE_TIME 而不是 STRING?
- r - R :将组中的分类行值组合为单个值
- flutter - 渲染时颤振SVG延迟
- javascript - 如何在 ReactJS 中实现动态复选框?
- android - LiveData 订阅者更改事件
- javascript - 如何将此keyValue格式转换为Angular Typescript中的数组
- python - False 和 True 是否等于 False?
- azure - Powershell 中的 Az acr 命令不起作用