有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在每10个单词后拆分一个字符串?

我正在寻找一种方法,每10个单词分割一块字符串。 我正在使用下面的代码

我的输入将是一个长字符串
这是一个示例文件,可以作为这个程序的参考,我希望每10个字将这一行拆分(换行)

private void jButton27ActionPerformed(java.awt.event.ActionEvent evt) {                                          

    String[] names = jTextArea13.getText().split("\\n");

           var S = names.Split().ToList();
           for (int k = 0; k < S.Count; k++) {
               nam.add(S[k]);
               if ((k%10)==0) { 
                   nam.add("\r\n");       
               }
           }

           jTextArea14.setText(nam);


output:
this is an example file that can be used as
a reference for this program, i want this line to
be split (newline) by every 10 words each.

感谢您的帮助


共 (3) 个答案

  1. # 1 楼答案

    I am looking for a way to split my chunk of string every 10 words

    带有非捕获组的正则表达式是实现以下目标的更简洁的方法:

    str = str.replaceAll("((?:[^\\s]*\\s){9}[^\\s]*)\\s", "$1\n");
    

    上面示例中的9就是words-1,因此,如果希望每20个单词拆分一次,请将其更改为19

    这意味着您的代码可能会变成:

    jTextArea14.setText(jTextArea13.getText().replaceAll("((?:[^\\s]*\\s){9}[^\\s]*)\\s", "$1\n"));
    

    对我来说,这更具可读性。当然,在您的情况下,它是否更具可读性取决于您的代码库用户是否相当精通正则表达式

  2. # 2 楼答案

    你是如此接近

    在将拆分后的单词重新设置到文本框之前,您没有添加拆分后的单词。StringBuildersb.append(S[k])将把分割名称添加到缓冲区中sb.append(" ")然后将添加一个空格。每行由10个空格分隔的名称组成

    StringBuilder sb = new StringBuilder();
    String[] names = jTextArea13.getText().split(" ");
    
    
    for (int k = 0; k < S.length; k++) {
    
       sb.append(S[k]).append(" ");
       if (((k+1)%10)==0) { 
          sb.append("\r\n");       
       }
    }
    

    最后,使用以下方法将其打印回jTextArea:

    jTextArea14.setText(sb.toString());
    

    只是一个旁注,因为sb是StringBuilder,所以需要使用toString nethod将其更改为string

  3. # 3 楼答案

    您也可以尝试利用Javautil

    public static final String WHITESPACE = " ";
    public static final String LINEBREAK = System.getProperty("line.separator");
    
    
     public static String splitString(String text, int wordsPerLine)
      {
        final StringBuilder newText = new StringBuilder();
    
        final StringTokenizer wordTokenizer = new StringTokenizer(text);
        long wordCount = 1;
        while (wordTokenizer.hasMoreTokens())
        {
            newText.append(wordTokenizer.nextToken());
            if (wordTokenizer.hasMoreTokens())
            {
                if (wordCount++ % wordsPerLine == 0)
                {
                    newText.append(LINEBREAK);
                }
                else
                {
                    newText.append(WHITESPACE);
                }
            }
        }
        return newText.toString();
       }