web-dev-qa-db-fra.com

Java: Comment diviser une chaîne par un nombre de caractères?

J'ai essayé de chercher en ligne pour résoudre cette question mais je n'ai rien trouvé.

J'ai écrit le code abstrait suivant pour expliquer ce que je demande:

String text = "how are you?";

String[] textArray= text.splitByNumber(4); //this method is what I'm asking
textArray[0]; //it contains "how "
textArray[1]; //it contains "are "
textArray[2]; //it contains "you?"

La méthode splitByNumber divise la chaîne "text" tous les 4 caractères. Comment je peux créer cette méthode?

Merci beaucoup

26
Meroelyth

Je pense que ce qu'il veut, c'est avoir une chaîne divisée en sous-chaînes de taille 4. Ensuite, je le ferais en boucle:

List<String> strings = new ArrayList<String>();
int index = 0;
while (index < text.length()) {
    strings.add(text.substring(index, Math.min(index + 4,text.length())));
    index += 4;
}
56
Guillaume Polet

Utiliser Goyave :

Iterable<String> result = Splitter.fixedLength(4).split("how are you?");
String[] parts = Iterables.toArray(result, String.class);
26
bruno conde

Qu'en est-il d'une expression rationnelle?

public static String[] splitByNumber(String str, int size) {
    return (size<1 || str==null) ? null : str.split("(?<=\\G.{"+size+"})");
}

See Fractionner une chaîne en sous-chaînes de longueur égale en Java

9
Sampisa

Essaye ça

 String text = "how are you?";
    String array[] = text.split(" ");

Ou vous pouvez l'utiliser ci-dessous

List<String> list= new ArrayList<String>();
int index = 0;
while (index<text.length()) {
    list.add(text.substring(index, Math.min(index+4,text.length()));
    index=index+4;
}
3
Suresh

Utilisation de primitives et de boucles Java simples.

private static String[] splitByNumber(String text, int number) {

        int inLength = text.length();
        int arLength = inLength / number;
        int left=inLength%number;
        if(left>0){++arLength;}
        String ar[] = new String[arLength];
            String tempText=text;
            for (int x = 0; x < arLength; ++x) {

                if(tempText.length()>number){
                ar[x]=tempText.substring(0, number);
                tempText=tempText.substring(number);
                }else{
                    ar[x]=tempText;
                }

            }


        return ar;
    }

Usage: String ar[]=splitByNumber("nalaka", 2);

3
sampathpremarathna

Quick Hack

private String[] splitByNumber(String s, int size) {
    if(s == null || size <= 0)
        return null;
    int chunks = s.length() / size + ((s.length() % size > 0) ? 1 : 0);
    String[] arr = new String[chunks];
    for(int i = 0, j = 0, l = s.length(); i < l; i += size, j++)
        arr[j] = s.substring(i, Math.min(l, i + size));
    return arr;
}
3
st0le

Je ne pense pas qu'il existe une solution prête à l'emploi, mais je ferais quelque chose comme ceci:

private String[] splitByNumber(String s, int chunkSize){
    int chunkCount = (s.length() / chunkSize) + (s.length() % chunkSize == 0 ? 0 : 1);
    String[] returnVal = new String[chunkCount];
    for(int i=0;i<chunkCount;i++){
        returnVal[i] = s.substring(i*chunkSize, Math.min((i+1)*chunkSize-1, s.length());
    }
    return returnVal;
}

L'utilisation serait:

String[] textArray = splitByNumber(text, 4);

EDIT: la sous-chaîne ne devrait pas dépasser la longueur de la chaîne.

2
Gilthans

C’est la solution la plus simple à laquelle je puisse penser .. essayez ceci

public static String[] splitString(String str) {
    if(str == null) return null;

    List<String> list = new ArrayList<String>();
    for(int i=0;i < str.length();i=i+4){
        int endindex = Math.min(i+4,str.length());
        list.add(str.substring(i, endindex));
    }
  return list.toArray(new String[list.size()]);
}
1
dku.rajkumar

Essayez cette solution, 

public static String[]chunkStringByLength(String inputString, int numOfChar) {
    if (inputString == null || numOfChar <= 0)
        return null;
    else if (inputString.length() == numOfChar)
        return new String[]{
            inputString
        };

    int chunkLen = (int)Math.ceil(inputString.length() / numOfChar);
    String[]chunks = new String[chunkLen + 1];
    for (int i = 0; i <= chunkLen; i++) {
        int endLen = numOfChar;
        if (i == chunkLen) {
            endLen = inputString.length() % numOfChar;
        }
        chunks[i] = new String(inputString.getBytes(), i * numOfChar, endLen);
    }

    return chunks;
}
0
Mohamed kazzali

Voici une implémentation succincte utilisant les flux Java8:

String text = "how are you?";
final AtomicInteger counter = new AtomicInteger(0);
Collection<String> strings = text.chars()
                                    .mapToObj(i -> String.valueOf((char)i) )
                                    .collect(Collectors.groupingBy(it -> counter.getAndIncrement() / 4
                                                                ,Collectors.joining()))
                                    .values();

Sortie:

[how , are , you?]
0
Pankaj Singhal