2017-05-25 3 views
0

Il est possible de ne pas casser le mot lorsqu'il est divisé avec java goyave spliter?Java Le diviseur de goyave ne brise pas le mot

J'ai cet exemple:

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

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

ce imprimera:

My na 

me is 

Fabi 

o and 

I ha 

ve a 

dog 

Mais je veux qu'il DonT ma parole

comme ceci:

My naME 

is Fabio 

and I have 

a dog 

Bu je n'ai pas le contrôler le texte, je veux seulement garder le dernier mot pour everty split

Répondre

0

La méthode appel fixedLength(5) va diviser le texte tous les 5 caractères, ce qui explique pourquoi vos mots sont divisés en deux parties, de sorte que vous ne pouvez pas utiliser cette méthode pour votre problème. Une chose que vous pourriez faire est d'utiliser une expression régulière comme un délimiteur pour diviser la chaîne chaque espace, et utiliser une boucle pour formater la sortie.

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(); 
    } 
} 

Ce type de logique devrait répondre à votre question.

0

Vous pouvez diviser les mots et construire les lignes que vous les itérer:

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); 

Sortie:

My name 
is Fabio 
and I have 
a dog