2010-11-25 16 views
1

J'ai une grande chaîne (avec du texte). Je dois le diviser en quelques morceaux (selon la limite de chat maximum), exécuter quelques opérations avec eux indépendamment, et à la fin fusionner le résultat.Algorithme de fractionnement de texte Java

Une tâche assez simple. Je cherche juste un algorithme qui divisera le texte naturellement. Donc, il ne le divise pas sur des sous-chaînes de taille fixe, et ne coupe pas les mots de moitié.

Par exemple (* est le 100 e char, limite max char est réglé sur 100):

.... me diviser aro * und ici ...

le 1er fragment doit contenir:. ..split me

le 2ème fragment devrait être: ici ...

Travailler en Java btw.

Répondre

1

Vous pouvez utiliser 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; 
} 

Et

System.out.println(splitByText("....split me around here...", " ", 14)); 

Prints

[....split me, around here...] 
+0

Fonctionne très bien. Le réimplémenter un peu afin qu'il ne lance pas une erreur, mais définit l'index pour démarrer la valeur + maxlength afin qu'il sépare le texte si aucun séparateur n'est présent. Merci beaucoup – ZolaKt

0

Si vous utilisez votre swing pour le chat, vous pouvez le manipuler comme ceci:

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

Jakarta commons-lang WordUtils.wrap() est proche:

  • Il brise que sur les espaces
  • Il n » t retourner une liste, mais vous pouvez choisir un "séparateur de ligne" qui est peu susceptible de se produire dans le texte & puis divisé sur ce