将字符串解析为更小的字符串,以适合java中固定宽度的列

将字符串解析为更小的字符串,以适合java中固定宽度的列,java,regex,string,parsing,Java,Regex,String,Parsing,我有一个文本区,允许任何长度的评论,但我们只能在单个评论中存储500个字符。因此,任何大于500个字符的注释都必须拆分并作为多个注释插入。我正在寻找帮助,将评论拆分为返回到空白的最后一个索引,这样我就不会把一个词一分为二。例如: 我有一个很长的评论,我希望它是分裂,所以它是有意义的 解析后: 评论1:我有一个很长的评论,我希望将其拆分,以便 评论2:有道理 感谢您的帮助这可能在全局搜索中起作用 # "([\\S\\s]{1,500})(?=\\s|$)\\s*" ( [\S\s]{1,5

我有一个文本区,允许任何长度的评论,但我们只能在单个评论中存储500个字符。因此,任何大于500个字符的注释都必须拆分并作为多个注释插入。我正在寻找帮助,将评论拆分为返回到空白的最后一个索引,这样我就不会把一个词一分为二。例如:

我有一个很长的评论,我希望它是分裂,所以它是有意义的

解析后:

评论1:我有一个很长的评论,我希望将其拆分,以便
评论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'