2017-06-16 5 views
-3

誰かがテキストの行を空白の偶数サイズのチャンクに分割する良い方法があるかどうかを調べています。具体的には、文字列とチャンク数をとる関数を作成しようとしています。目標は、分割の各行が同じ文字数またはできるだけ近くにあることです(できるだけ0に近いすべての行の間の文字デルタ)。例えば、文字列がある場合:。。Java:テキストを均等なサイズのチャンクに分割する(白いスペース上)

テキストは=「Loremのイプサム嘆き、AMET consecteturのadipiscingのELIT座る前庭augue SAPIEN、レオVEL、tinciduntのlobortisイプサムVARIUS Vivamus EX lectus、efficitur NECのLoremのIDを、elementum volutpatリベロ" chunksSize = 2

は、次のようになります。

1行目:Loremのイプサム悲しみは、consecteturのadipiscingのELIT、AMET座ります。前庭術後の痛み、体重の変化

2行目:tincidunt lobortis ipsum。 Vivamus ex lectus、efficitur nec lorem id、 elementum volutpat libero。 chunksSize = 3

は、次のようになります。

1行目:Loremのイプサム悲しみは、consecteturのadipiscingのELIT、AMET座ります。 Vestibulum

2行目:augue sapien、varius a leo vel、tincidunt lobortis ipsum。 Vivamus

3行目:ex lectus、efficitur nec lorem id、elementum volutpat libero。

チャンクサイズ= 4は、次のようになります。

行1:Loremのイプサム悲しみ、AMET consecteturのadipiscing座る

2行目:ELIT。前立腺肥大症、慢性腎不全症候群、

3行目:tincidunt lobortis ipsum。 Vivamus ex lectus、

4行目:効率的なneclorem id、elementum volutpat libero。

これらの分割は、私が目で行ったように正確ではないかもしれません。誰でもJavaでこれを手に入れたいですか?

+0

Stringクラスの 'substring(int beginIndex、int endIndex)'メソッドを使用して、それらをチャンクに分割します。 –

+0

私は白いスペースでこれを分割しようとしていますが、中間語ではありません。 – cdubbs

答えて

0
int noChunks = 3;//get this from user 
String line = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum augue sapien, varius a leo vel, tincidunt lobortis ipsum. Vivamus ex lectus, efficitur nec lorem id, elementum volutpat libero."; 

String []arr = line.split(" "); 

int chunkSize = arr.length/noChunks; 

List<String> chunks = new ArrayList<String>(); 

int index = 0; 

for(int i=0;i<noChunks;i++){ 
    StringBuilder builder = new StringBuilder(); 
    for(int x = 0;x<chunkSize;x++){ 
     builder.append(arr[index]+" "); 
     index++; 
    } 
    chunks.add(builder.toString()); 
} 
+0

ありがとうAnkit - StringBuilder宣言を外側のforループに移動し、そうでない場合はすべてのチャンクが追加されています。 ライン1:ラインの一つが、例えば、その中には本当に長い単語を持っている場合とされていること、難しさはここにある「Loremのイプサム嘆き、AMET consectetursssssssssssssssssssssssssssssのadipiscing ELIT前庭に座る。」 回線2:「augueのSAPIEN、バリウスをレオ・ベル、ティンサイン・ロボティス・アイプサム」 Line3: "Vivamus ex lectus、efficitur nec lorem id、elementum volutpat"この場合、線が均等に出ない。 – cdubbs

+0

ワードカウントを使用する代わりに、文字カウントを使用します。 line.length/noChunkksに達するまで単語を追加し、次の項目に移動します。このようにして、最後に不足している単語の問題も解消します。 – tevemadar

+0

@cdubbsあなたの質問から、白いスペースに分割したいと思っています。つまり、各チャンクは等しい番号を持つ必要があります。言葉のこのユースケースでは、単語の長さが問題になるはずはありません。 tevemadarが言ったように、キャラクターカウントをすることができます。あなたがあなたの答えを持っていると思うなら、これを正しいものとしてマークしてください。 – Max08

関連する問題