2017-10-16 2 views
1

Je suis en train de découper une chaîne avec un dernier espace de mon max caractères autorisé:découpant une chaîne avec l'espace dernier de Max Characters

Attente:

String name = « John David Guetta Mark Henry Anthoney Sam ";

Max caractères autorisé:

Il devrait revenir comme:

John David Guetta MarkHenry 
Anthoney Sam 

Résultat réel:

John David Guetta MarkHenry An 
thoney Sam 

code:

public static List<String> splitByLength(String str, int n) { 
    List<String> returnList = new ArrayList<>(); 
    StringBuilder sb = new StringBuilder(); 

    for (int i = 0; i < str.length(); i++) { 
     if (i > 0 && (i % n == 0)) { 
      returnList.add(sb.toString()); 
      sb = new StringBuilder(); 
     } 

     sb.append(str.charAt(i)); 
    } 
    if (StringUtils.isNoneBlank(sb.toString())) { 
     returnList.add(sb.toString()); 
    } 
    return returnList; 
} 

Répondre

1

Vous pouvez utiliser une expression régulière qui accepte jusqu'à 30 caractères:

String name = "John David Guetta MarkHenry Anthoney Sam"; 
Pattern p = Pattern.compile(".{1,30}(\\s+|$)"); 
Matcher m = p.matcher(name); 
while(m.find()) { 
    System.out.println(m.group().trim()); 
} 

Notez le (\\s|$) pour casser soit sur un espace ou une fois la fin de la chaîne initiale est atteinte.

+0

Je souhaite que je pourrais upvote 1000 fois .. Merci d'avoir économisé mon temps ... –

1

Je trouve toujours à l'aide difficile et gênant Regex, alors voici une solution que j'utiliser

private static void splitByLength(String str, int n) { 
    String newStr = ""; 
    int splitIndex = 0; 
    for (int i = 0; i < str.length(); i++) { 
     if (str.charAt(i) != ' ') {  
      newStr = newStr + str.charAt(i); //Keep adding chars until you find a space 
      if (newStr.length() > n) { //If newStr's length exceeds 'n', break the loop 
       break; 
      } 
     } else { 
      splitIndex = i; //Store the last space index 
      newStr = newStr + ' '; 
     } 
    } 
    System.out.println(str.substring(0, splitIndex).trim()); //Use the splitIndex to print a substring 
    System.out.println(str.substring(splitIndex, str.length()).trim()); 
} 
-1

Peut-être intéressant

String name = "John David Guetta MarkHenry Anthoney Sam"; 
    StringBuilder myName = new StringBuilder(name); 
    if(name.length() > 30) { 
     myName.setCharAt(27, '\n'); 
    } 
    System.out.println(myName); 

Sortie:

John David Guetta Mark Henry

Anthoney Sam