2010-11-25 24 views
1

大きな文字列(テキスト付き)があります。 私はいくつかの部分に分割する必要があります(最大チャットの制限に従う)、それらと一緒にいくつかの操作を独立して実行し、最後に結果をマージします。Javaテキスト分割アルゴリズム

かなり簡単な作業です。 私は、自然にテキストを分割するアルゴリズムを探しています。したがって、それは固定サイズの部分文字列に分割されず、単語を半分にカットしません。例えば

は(*、最大文字制限が100に設定されている100番目の文字である):

.... ARO私を分割*ここウント...

第一の断片が含まれている必要があります。この辺り...

がところで、Javaでの作業:第二の断片があるべき私

を..split。

答えて

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...] 
+0

素晴らしい作品です。 エラーが発生しないように再実装しましたが、セパレータがない場合はテキストを分割するようにインデックスをstart + maxlengthの値に設定します。どうもありがとう – ZolaKt

7

word wrapping上のWikipediaの記事がこれを説明しています。 Knuthのalgorithmにもリンクしています。

0

あなたは、あなたがこのようにそれを扱うことができ、あなたのチャットのためのスイングを使用している場合:

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

Jakarta commons-lang WordUtils.wrap()は近くにあります:それは唯一のそれはdoesnの

  • スペースに壊れ

    • リストを返すことはできませんが、テキストには現れそうにない「行区切り」を選択することができます&次に分割する