Java文本分裂算法

时间:2010-11-25 12:58:53

标签: java algorithm string text split

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

一个非常简单的任务。 我只是在寻找能够自然地分割文本的算法。所以它并没有将它分割成固定大小的子串,也没有把它们切成两半。

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

....分开我aro * und here ...

第一个片段应该包含:...分裂我

第二个片段应该是:在这附近......

使用Java btw。

4 个答案:

答案 0 :(得分:7)

关于word wrapping的维基百科文章对此进行了讨论。它还链接到Knuth的algorithm

答案 1 :(得分:1)

您可以使用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...]

答案 2 :(得分:1)

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

  • 它只会在空格上打破
  • 它不会返回列表,但您可以选择一个不太可能出现在文本和列表中的“行分隔符”。然后拆分

答案 3 :(得分:0)

如果您正在使用Swing进行聊天,那么您可以像这样处理:

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