将字符串解析为更小的字符串,以适合java中固定宽度的列
我有一个文本区,允许任何长度的评论,但我们只能在单个评论中存储500个字符。因此,任何大于500个字符的注释都必须拆分并作为多个注释插入。我正在寻找帮助,将评论拆分为返回到空白的最后一个索引,这样我就不会把一个词一分为二。例如: 我有一个很长的评论,我希望它是分裂,所以它是有意义的 解析后: 评论1:我有一个很长的评论,我希望将其拆分,以便将字符串解析为更小的字符串,以适合java中固定宽度的列,java,regex,string,parsing,Java,Regex,String,Parsing,我有一个文本区,允许任何长度的评论,但我们只能在单个评论中存储500个字符。因此,任何大于500个字符的注释都必须拆分并作为多个注释插入。我正在寻找帮助,将评论拆分为返回到空白的最后一个索引,这样我就不会把一个词一分为二。例如: 我有一个很长的评论,我希望它是分裂,所以它是有意义的 解析后: 评论1:我有一个很长的评论,我希望将其拆分,以便 评论2:有道理 感谢您的帮助这可能在全局搜索中起作用 # "([\\S\\s]{1,500})(?=\\s|$)\\s*" ( [\S\s]{1,5
评论2:有道理 感谢您的帮助这可能在全局搜索中起作用
# "([\\S\\s]{1,500})(?=\\s|$)\\s*"
( [\S\s]{1,500} ) # Capture group 1
(?= \s | $ )
\s*
只需处理捕获组1。拆分时的新注释将始终删除空白,使其左对齐
String line=txtArea.Text;
String line = txtArea.Text;
String[] array = line.split("\\s+");
String currentText = "";
for(int i=0; i < array.length; i++)
{
if((currentText.length() + array[i].length) <= 500)
{
currentText += array[i] + " ";
}
else
{
//Save current text somewhere and start new one.
currentText = "";
}
}
字符串[]数组=line.split(\\s+);
字符串currentText=“”;
for(int i=0;iimport java.util.ArrayList;
公开课评论{
公共静态void main(字符串[]args){
字符串注释=”;
//这将在拆分后保留注释
ArrayList splittedComments=新建ArrayList();
while(comment.length()>500)
{
String splitCOmment=comment.substring(0500);
int lastIndexOfWhiteSapce=splitCOmment.lastIndexOf(“”);
splitCOmment=splitCOmment.substring(0,lastIndexOfwhitesApp);
splittedComments.add(splitCOmment);
//删掉所做的评论,然后重新处理
comment=comment.substring(lastIndexOfWhiteSapce.trim();
}
拆分注释。添加(注释);
}
}
可用于此拆分器。固定长度(500)
示例代码
你在找算法或代码吗?你可以使用substring和lastindexOf方法来很好地解决你的问题。我可以对substring和lastindexOf以及while循环使用蛮力。我想知道是否有人可以告诉我如何更优雅地完成它。你想要
List
作为结果还是String
作为结尾行\n
?Java正则表达式需要双转义,因为代码中只删除空格,所以currentText
将与没有空格的文本字段相同。很抱歉,插入后忘记添加空格。更正了。这对您有帮助吗?我不是要问的人,我只是评论员。所以您按空格分割只是为了把空格放回去?这看起来不是一个非常有效的解决方案…这就是我目前的解决方案,谢谢你重申我的工作。这很优雅,但它将分割跨越499-501个字符的最后一个单词,你是对的:)谢谢
import java.util.ArrayList;
public class Comment {
public static void main(String[] args) {
String comment = "";
//This will hold the comments after split
ArrayList<String> splittedComments = new ArrayList<String>();
while(comment.length() > 500)
{
String splitCOmment = comment.substring(0,500);
int lastIndexOfWhiteSapce = splitCOmment.lastIndexOf(" ");
splitCOmment = splitCOmment.substring(0,lastIndexOfWhiteSapce);
splittedComments.add(splitCOmment);
//trim off the taken comment and process again
comment = comment.substring(lastIndexOfWhiteSapce).trim();
}
splittedComments.add(comment);
}
}
String longComment = "Very long commment to be split ....."; // this is longer :)
List<String> shortComments = new ArrayList<String>();
Splitter splitter = Splitter.fixedLength(500);
for (String shortComment : splitter.split(longComment)) {
shortComments.add(shortComment);
}
'com.google.guava:guava:15.0'