【问题标题】:Java text splitting algorithmJava文本分割算法
【发布时间】:2010-11-25 12:58:53
【问题描述】:

我有一个大字符串(带有文本)。 我需要把它分成几块(根据最大聊天限制),独立运行一些操作,最后合并结果。

一个非常简单的任务。 我只是在寻找一种可以自然分割文本的算法。所以它不会将其拆分为固定大小的子字符串,也不会将单词切成两半。

例如(* 是第 100 个字符,最大字符限制设置为 100):

....把我分到这里来...

第一个片段应该包含:...split me

第二个片段应该是:就在这里...

顺便说一句,在 Java 中工作。

【问题讨论】:

    标签: java algorithm string text split


    【解决方案1】:

    word wrapping 上的维基百科文章讨论了这一点。它还链接到 Knuth 的 algorithm

    【讨论】:

      【解决方案2】:

      你可以使用 lastIndexOf(String find, int index)。

      public static List<String> splitByText(String text, String sep, int maxLength) {
          List<String> ret = new ArrayList<String>();
          int start = 0;
          while (start + maxLength < text.length()) {
              int index = text.lastIndexOf(sep, start + maxLength);
              if (index < start)
                  throw new IllegalArgumentException("Unable to break into strings of " +
                          "no more than " + maxLength);
              ret.add(text.substring(start, index));
              start = index + sep.length();
          }
          ret.add(text.substring(start));
          return ret;
      }
      

      System.out.println(splitByText("....split me around here...", " ", 14));
      

      打印

      [....split me, around here...]
      

      【讨论】:

      • 效果很好。重新实现了一点,所以它不会抛出错误,但将索引设置为 start+maxlength 值,因此如果不存在分隔符,它会拆分文本。非常感谢
      【解决方案3】:

      Jakarta commons-lang WordUtils.wrap() 关闭:

      • 它只在空格处中断
      • 它不返回列表,但您可以选择文本中不太可能出现的“行分隔符”,然后在其上拆分

      【讨论】:

        【解决方案4】:

        如果您使用 Swing 进行聊天,则可以这样处理:

        //textarea is JTextArea instance
        textarea.setLineWrap(true);
        textarea.setWrapStyleWord(true);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-16
          • 2011-12-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多