it-swarm.com.de

Java: Wie teilt man eine Zeichenfolge durch eine Reihe von Zeichen auf?

Ich habe versucht, online nach dieser Frage zu suchen, aber ich habe nichts gefunden.

Ich habe den folgenden abstrakten Code geschrieben, um zu erklären, was ich frage:

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?"

Die Methode splitByNumber teilt die Zeichenfolge "text" alle 4 Zeichen auf. Wie kann ich diese Methode erstellen?

Danke vielmals

26
Meroelyth

Ich denke, dass er einen String haben möchte, der in Teilstrings der Größe 4 aufgeteilt ist. Dann würde ich das in einer Schleife machen:

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

Verwenden von Guave :

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

Was ist mit einem Regex?

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

Siehe Zeichenfolge in gleich lange Teilstrings in Java aufteilen

9
Sampisa

Versuche dies

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

Oder Sie können es unten verwenden

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

Verwenden von einfachen Java-Grundelementen und -Schleifen.

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

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

3

Schneller 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

Ich glaube nicht, dass es eine Out-of-the-Box-Lösung gibt, aber ich würde so etwas tun:

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

Verwendung wäre:

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

BEARBEITEN: Der Teilstring sollte die Länge des Strings eigentlich nicht überschreiten.

2
Gilthans

Dies ist die einfachste Lösung, die ich mir vorstellen könnte

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

Versuchen Sie diese Lösung, 

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

Hier ist eine prägnante Implementierung mit Java8-Streams:

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

Ausgabe:

[how , are , you?]
0
Pankaj Singhal