Java字符串包装:如何在新行字符(\n)处将单词包装成字符串

Java字符串包装:如何在新行字符(\n)处将单词包装成字符串,java,regex,string,conditional,newline,Java,Regex,String,Conditional,Newline,我们想在新行字符(\n)处将单词包装成字符串。基本上,我们是按ENTER键开始新行 按下回车键可在信息中创建新行 输入数据: string s = "EDIORDER-SAVE COMMENTS C3 Generic LOC 0833 Expected arrival 01/07/2016 OTYPE NE TRKPC 01 GM/00007643020008361321" ; StringBuilder sb = new StringBuilder(s); int i = 0; whi

我们想在新行字符(\n)处将单词包装成字符串。基本上,我们是按ENTER键开始新行

按下回车键可在信息中创建新行

输入数据:

string s = "EDIORDER-SAVE COMMENTS C3 Generic LOC 0833 Expected arrival 01/07/2016  OTYPE NE TRKPC 01 GM/00007643020008361321"  ;

StringBuilder sb = new StringBuilder(s);

int i = 0;
while ((i = sb.indexOf(" ", i + 20)) != -1) {
    sb.replace(i, i + 1, "\n");
}
SalesOrder    NComment                            SalesOrderLine                    StockCode
183590  EDI ORDER-SAVE COMMENTS                         1                                 
183590                                                  2                         abc-defg-13OZ-24              
183590  C3    Generic                                   37                                
183590  LOC 0833                                        38                                
183590  Expected arrival               01/07/2016       39                                
183590  OTYPE NE                                        40                                
183590  TRKPC 01 GM/00007643020008361321                51
字符串在注释列中捕获。 给出的评论栏为:

EDI ORDER-SAVE COMMENTS\nC3 Generic\nLOC 0833\nExpected arrival 01/07/2016\nOTYPE NE\nTRKPC 01 GM/00007643020008361321
我们试过了:

string s = "EDIORDER-SAVE COMMENTS C3 Generic LOC 0833 Expected arrival 01/07/2016  OTYPE NE TRKPC 01 GM/00007643020008361321"  ;

StringBuilder sb = new StringBuilder(s);

int i = 0;
while ((i = sb.indexOf(" ", i + 20)) != -1) {
    sb.replace(i, i + 1, "\n");
}
SalesOrder    NComment                            SalesOrderLine                    StockCode
183590  EDI ORDER-SAVE COMMENTS                         1                                 
183590                                                  2                         abc-defg-13OZ-24              
183590  C3    Generic                                   37                                
183590  LOC 0833                                        38                                
183590  Expected arrival               01/07/2016       39                                
183590  OTYPE NE                                        40                                
183590  TRKPC 01 GM/00007643020008361321                51
转换后的预期数据: 换行符是新行字符

Long  String of Comment field  should Splits in 6 different lines 

EDI ORDER-SAVE COMMENTS

C3 Generic

LOC 0833

Expected arrival 01/07/2016

OTYPE NE

TRKPC 01 GM/00007643020008361321
输出后的精确数据如下所示:

string s = "EDIORDER-SAVE COMMENTS C3 Generic LOC 0833 Expected arrival 01/07/2016  OTYPE NE TRKPC 01 GM/00007643020008361321"  ;

StringBuilder sb = new StringBuilder(s);

int i = 0;
while ((i = sb.indexOf(" ", i + 20)) != -1) {
    sb.replace(i, i + 1, "\n");
}
SalesOrder    NComment                            SalesOrderLine                    StockCode
183590  EDI ORDER-SAVE COMMENTS                         1                                 
183590                                                  2                         abc-defg-13OZ-24              
183590  C3    Generic                                   37                                
183590  LOC 0833                                        38                                
183590  Expected arrival               01/07/2016       39                                
183590  OTYPE NE                                        40                                
183590  TRKPC 01 GM/00007643020008361321                51

任何帮助都将不胜感激

对不起,我没有真正得到你想要的。是否要在经过第20个字符的单词前插入分隔符

    StringBuilder sb = new StringBuilder(s);
    int currentSpaceFound = sb.indexOf(" ");
    int i = 1;
    while (currentSpaceFound != -1) {
        int lastOccurence = currentSpaceFound;
        currentSpaceFound = sb.indexOf(" ", currentSpaceFound + 1);
        if (currentSpaceFound > (20 * i)) {
            sb.setCharAt(lastOccurence, '\n');
            i++;
        }
    }
    System.out.println(sb);

对不起,我没有真正得到你想要的。是否要在经过第20个字符的单词前插入分隔符

    StringBuilder sb = new StringBuilder(s);
    int currentSpaceFound = sb.indexOf(" ");
    int i = 1;
    while (currentSpaceFound != -1) {
        int lastOccurence = currentSpaceFound;
        currentSpaceFound = sb.indexOf(" ", currentSpaceFound + 1);
        if (currentSpaceFound > (20 * i)) {
            sb.setCharAt(lastOccurence, '\n');
            i++;
        }
    }
    System.out.println(sb);

我认为这样做应该奏效:

private String wrapComment(String comment, int length) {

    if(comment.length() <= length) return comment;

    StringBuilder stringBuilder = new StringBuilder(comment);

    int spaceIndex = -1;

    for(int i = 0; i < comment.length(); i ++) {

        if(i % length == 0 && spaceIndex > -1) {
            stringBuilder.replace(spaceIndex, spaceIndex+1, "\n");
            spaceIndex = -1;
        }

        if(comment.charAt(i) == ' ') {
            spaceIndex = i;
        }

        stringBuilder.append(comment.charAt(i));
    }

    return stringBuilder.toString();
}
输出:

EDI ORDER-SAVE COMMENTS C3
Generic LOC 0833 Expected
arrival 01/07/2016  OTYPE NE TRKPC
01 GM/00007643020008361321

我认为这样做应该奏效:

private String wrapComment(String comment, int length) {

    if(comment.length() <= length) return comment;

    StringBuilder stringBuilder = new StringBuilder(comment);

    int spaceIndex = -1;

    for(int i = 0; i < comment.length(); i ++) {

        if(i % length == 0 && spaceIndex > -1) {
            stringBuilder.replace(spaceIndex, spaceIndex+1, "\n");
            spaceIndex = -1;
        }

        if(comment.charAt(i) == ' ') {
            spaceIndex = i;
        }

        stringBuilder.append(comment.charAt(i));
    }

    return stringBuilder.toString();
}
输出:

EDI ORDER-SAVE COMMENTS C3
Generic LOC 0833 Expected
arrival 01/07/2016  OTYPE NE TRKPC
01 GM/00007643020008361321


分割标准是什么?它不能是“”,因为该字符也存在于“LOC 0833”的中间,例如。以新行(\n)宽度字符拆分。最大宽度长度为20。如果“\n”不是s,则不能将其用作拆分标准,因此它必须是某个长度(或多个长度)或另一个字符。我们希望实现以下java代码:如果可能,我们希望将每个行空间替换为\n。您的6行输出不可能…拆分标准是什么?它不能是“”,因为该字符也存在于“LOC 0833”的中间,例如。以新行(\n)宽度字符拆分。最大宽度长度为20。如果“\n”不是s,则不能用作拆分标准,因此它必须是某个长度(或多个长度),或另一个字符。我们希望实现此java代码:如果可能,我们希望用\n替换每行空格。您的6行输出不可能…是的,我们希望在通过第20个字符的单词之前插入breakIterator。输出应拆分为6行,如示例中所述。我们希望实现这个java程序:你的意思是第六行的内容是错误的:它达到了标准。如果我解释错了,请纠正我。但你的六行解决方案是错误的,不是吗?例如,EDI ORDER-SAVE注释有24个字符,应该在EDI ORDER-SAVE之后中断?第一行应该是EDI ORDER-SAVE注释。我们想在通过第20个字符的单词之前插入BREAKE迭代器。输出应该像示例中提到的那样分为6行。我们想实现这个java程序:你的意思是第六行的内容是错误的:它达到了标准。如果我解释错了,请纠正我。但你的六行解决方案是错误的,不是吗?例如,EDI ORDER-SAVE注释有24个字符,在EDI ORDER-SAVE之后应该中断?第一行应该是EDI ORDER-SAVE注释它看起来是近似值。但我已经给出了预期的数据输出。它将只提供6行。我们希望实现类似于以下内容的换行:paste.ofcode.org/S4LEQM2RpEcre3PcYnbpxC如果可能,我们希望将每行空间替换为\n您的意思是在每行之后需要另一个换行符?我想说的是,当这个长字符串拆分时,它应该像这样保存在sql数据库中。正好在6行新行中。我们在新行字符处有换行符。然后可能会对6行进行拆分,例如:aa\nbb\ncc\ndd\nee\nffYes它看起来是近似值。但我已经给出了预期的数据输出。它将只提供6行。我们希望实现类似于以下内容的换行:paste.ofcode.org/S4LEQM2RpEcre3PcYnbpxC如果可能,我们希望将每行空间替换为\n您的意思是在每行之后需要另一个换行符?我想说的是,当这个长字符串拆分时,它应该像这样保存在sql数据库中。正好在6行新行中。我们在新行字符处有换行符。然后可以为ex:aa\nbb\ncc\ndd\nee\nff拆分6行