2017-06-16 2 views
-3

Ich suche, ob jemand eine gute Möglichkeit hat, eine Textzeile in gleichgroße Stücke auf weißem Raum aufzuteilen. Insbesondere suche ich nach einer Funktion, die eine Zeichenfolge und eine Anzahl von Chunks verwendet. Das Ziel wäre, dass jede Zeile der Teilung die gleiche Anzahl von Zeichen hat oder so nahe wie möglich (Zeichen-Delta zwischen allen Zeilen so nahe wie möglich an 0). Zum Beispiel, wenn die Zeichenfolge:Java: Text in gleichgroße Stücke aufteilen (auf Leerraum)

text = „Lorem ipsum dolor sit amet, consectetur adipiscing elit Vestibulum augue sapien Varius ein leo vel, tincidunt lobortis ipsum Vivamus ex lectus, efficitur ang lorem id, elementum volutpat libero.. . "

chunksSize = 2 wäre:

Zeile 1: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum augue sapien, varius a leo vel

Zeile 2: tincidunt lobortis ipsum. Vivamus ex lectus, Effizienz-Effizienz-ID, elementum volutpat libero.

chunksSize = 3 wäre:

Zeile 1: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum

Zeile 2: augue sapien, varius a leo vel, tincidunt lobortis ipsum. Vivamus

Zeile 3: ex lectus, efficitur nec lorem id, elementum volutpat libero.

chunkSize = 4, wäre:

Zeile 1: Lorem ipsum dolor sit amet, consectetur adipiscing

Zeile 2: elit. Vestibulum augue sapien, varius a leo vel,

Zeile 3: tincidunt lobortis ipsum. Vivamus ex lectus,

Zeile 4: efficurur nec lorem id, elementum volutpat libero.

Diese Splits sind möglicherweise nicht genau genau wie ich sie mit dem Auge tat. Will sich jemand auf Java versuchen?

+0

Verwenden Sie 'substring (int beginIndex, int endIndex)' Methode der String-Klasse, um sie in Stücke zu teilen. –

+0

Ich versuche, dies auf Leerraum zu teilen, nicht in der Mitte des Wortes. – cdubbs

Antwort

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

Danke Ankit - Ich habe eine Korrektur vorgenommen, indem ich die StringBuilder-Deklaration in die äußere for-Schleife verschoben habe, ansonsten hängen alle Chunks an. Davon abgesehen, ist hier die Schwierigkeit ist, wenn eine der Leitungen ein wirklich langes Wort in sich hat, zum Beispiel: Line1: "Lorem ipsum dolor sit amet, consectetursssssssssssssssssssssssssssss adipiscing elit Vestibulum." Netz2: „augue sapien, varius a leo vel, tincidunt lobortis ipsum. " Line3: "Vivamus ex lectus, Effizienz in der Identifikation, elementum volutpat" In diesen Fällen kommen die Linien nicht gleichmäßig heraus. – cdubbs

+0

Verwenden Sie anstelle der Wortzählung die Anzahl der Zeichen. Fügen Sie die Wörter an, bis Sie line.length/noChunks erreichen (übertreffen), und gehen Sie dann zum nächsten Element.Auf diese Weise beseitigen Sie auch das Problem der fehlenden Wörter am Ende. – tevemadar

+0

@cdubbs Von Ihrer Frage scheint es, dass Sie auf weiße Räume aufteilen wollten, d. H. Jeder Chunk sollte die gleiche Nummer haben. von Wörtern. Die Länge eines Wortes sollte für diesen Anwendungsfall kein Problem sein. Wie tevemadar gesagt hat, kannst du einen Charakter zählen. Wenn Sie denken, dass Sie Ihre Antwort haben, markieren Sie diese bitte als korrekt. – Max08

Verwandte Themen