2017-05-25 3 views
0

Es ist nicht möglich, Wort zu brechen, wenn Split mit Java Guava Spliter?Java Guava Splitter nicht das Wort brechen

Ich habe dieses Beispiel:

var String msg = "My name is Fabio and I have a dog"; 

Splitter.fixedLength(5).split(msg).forEach(item -> { 
      System.out.println(item); 
     }); 

dies drucken:

My na 

me is 

Fabi 

o and 

I ha 

ve a 

dog 

Aber ich will, dass er mein Wort

Genau wie diese brechen dont:

My naME 

is Fabio 

and I have 

a dog 

Bu Ich habe nicht die steuere den Text, ich möchte nur das letzte Wort für ect split behalten

Antwort

0

Der Methodenaufruf fixedLength(5) teilt den Text alle 5 Zeichen, weshalb Ihre Wörter in zwei Teile zerlegt werden, so dass Sie diese nicht verwenden können Methode für Ihr Problem. Eine Sache, die Sie tun können, ist, einen regulären Ausdruck als Trennzeichen zu verwenden, um die Zeichenkette jedes whitespace zu teilen und eine Schleife zu verwenden, um die Ausgabe zu formatieren.

ArrayList<String> items = Splitter.onPattern("\\s+").splitToList(msg) 
for (int i = 0; i < items.size(); i++) { 
    System.out.print(items.get(i) + " "); 
    if ((i+1) % 2 == 0) { 
      System.out.println(); 
    } 
} 

Diese Art von Logik sollte Ihre Frage beantworten.

0

Sie können die Wörter aufgespalten und die Linien bauen, wie Sie sie durchlaufen:

final List<String> lines = new ArrayList<>(); 
final StringBuilder builder = new StringBuilder(); 
for (String word : Splitter.on(' ').split(msg)) { 
    if (builder.length() == 0) { 
     builder.append(word); 
    } else if (builder.length() <= 5) { 
     builder.append(' ').append(word); 
    } else { 
     lines.add(builder.toString()); 
     builder.setLength(0); 
     builder.append(word); 
    } 
} 
if (builder.length() > 0) { 
    lines.add(builder.toString()); 
} 
lines.forEach(System.out::println); 

Ausgang:

My name 
is Fabio 
and I have 
a dog