Java 文本在指定长度后拆分,但不使用grails打断单词
我有一个长字符串,需要将其解析为长度不超过50个字符的字符串数组。对我来说,最棘手的部分是确保正则表达式找到50个字符之前的最后一个空格,以便在字符串之间完全分开,因为我不希望单词被截断Java 文本在指定长度后拆分,但不使用grails打断单词,java,regex,groovy,Java,Regex,Groovy,我有一个长字符串,需要将其解析为长度不超过50个字符的字符串数组。对我来说,最棘手的部分是确保正则表达式找到50个字符之前的最后一个空格,以便在字符串之间完全分开,因为我不希望单词被截断 public List<String> splitInfoText(String msg) { int MAX_WIDTH = 50; def line = [] String[] words; msg = msg.trim(); words = ms
public List<String> splitInfoText(String msg) {
int MAX_WIDTH = 50;
def line = [] String[] words;
msg = msg.trim();
words = msg.split(" ");
StringBuffer s = new StringBuffer();
words.each {
word -> s.append(word + " ");
if (s.length() > MAX_WIDTH) {
s.replace(s.length() - word.length()-1, s.length(), " ");
line << s.toString().trim();
s = new StringBuffer(word + " ");
}
}
if (s.length() > 0)
line << s.toString().trim();
return line;
}
公共列表拆分信息文本(字符串msg){
int MAX_WIDTH=50;
def行=[]字符串[]个字;
msg=msg.trim();
words=msg.split(“”);
StringBuffer s=新的StringBuffer();
每个字{
word->s.append(word+“”);
如果(s.length()>MAX_WIDTH){
s、 替换(s.length()-word.length()-1,s.length(),“”);
第0行)
行试试这个:
List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile(".{1,50}(?:\\s|$)", Pattern.DOTALL);
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}
List matchList=new ArrayList();
Pattern regex=Pattern.compile(“.{1,50}(?:\\s |$)”,Pattern.DOTALL);
Matcher regexMatcher=regex.Matcher(subjectString);
while(regexMatcher.find()){
add(regexMatcher.group());
}
我认为蒂姆的答案有一个更好的版本:
List matchList = ( subjectString =~ /(?s)(.{1,50})(?:\s|$)/ ).collect { it[ 1 ] }
提供您的输入和预期输出?公共列表splitInfoText(String msg){int MAX_WIDTH=50;def line=[]String[]word;msg=msg.trim();word=msg.split(“”);StringBuffer s=new StringBuffer();word.each{word->s.append(word+“”);if(s.length()>MAX_WIDTH){s.replace(s.length()-word.length()-1,s.length(),“”);第0行)第@Nimmy行:我试图将您的代码放在问题的主体中,但如果您自己编辑问题并输入代码,效果会更好。如果您提供输入和预期输出,而不是Groovy代码,效果会更好。@JRSofty:我忘了初始化匹配列表
参数-是否有效现在?如果没有,到底是什么问题?现在它工作了。原版捕获了空格,但除了一个单词之外没有捕获文本。这正如我所期望的那样工作。我一点也不懂Groovy,但这在我看来确实非常Groovy。+1:)