Text aufsplitten

Status
Nicht offen für weitere Antworten.

bienchen84

Mitglied
Hallo Leute,

Ich habe einen Text und möchte den gerne an jedem 5.ten Leerzeichen aufsplitten. Das aufsplitten geht mit split(). Aber wie zähle ich jedes 5.te Leerzeichen? Geht sowas überhaupt?
LG Sabine
 
Möchtest du also den Text bis zum 5. Leerzeichen in einen neuen String, dann nach dem 5. bis zum 10. in einen anderen neuen String, usw?

Dann kannste auch den StringTokenizer verwenden. Der zerlegt dir den String (also deinen Text), indem er immer, wenn ein bestimmtes Zeichen (in diesem Fall ein Leerzeichen) auftritt, den String bis dorthin abschneidet. Du könntest das dann so machen, dass er dir dann immer 5 Durchläufe lang diese Teile nimmt und zusammenbaust und die nächsten 5 Durchläufe dann in einen anderen String usw.
 
Zuletzt bearbeitet von einem Moderator:
Genau, ab dem 5. Leerzeichen will ich nämlich ein \n einführen, damit der Text an der Stelle umbricht. Ich hab nur noch keine Vorstellung wie er das 5. Leerzeichen ermitteln soll. Eine doppelte Schleife?
 
Hallo Leute,

Ich habe einen Text und möchte den gerne an jedem 5.ten Leerzeichen aufsplitten. Das aufsplitten geht mit split(). Aber wie zähle ich jedes 5.te Leerzeichen? Geht sowas überhaupt?
LG Sabine
ja geht.. du kannst ja dem Split sagen dass er 5 leerzeichen sozusagen beachten soll.

zb - geht vll auch einfacher
Java:
    private static void split(String text) {
        Pattern pattern = Pattern.compile("(\\w+ ){5}");
        Matcher matcher = pattern.matcher(text);
        while (matcher.find()) {
            int length = matcher.end() - matcher.start();
            String current = matcher.group(0);
            text = text.substring(length);
        }
        String rest = text;
    }
annahme ist hier dass alles immer genau durch 1 leerzeichen getrennt sind....
 
Hm, aber diese Methode schneidet den Text nicht ab dem 5. Leerzeichen oder? Ich hab noch nicht ganz verstanden was das Ding macht...😳
 
Strings (also Texte) kann man sowieso nicht abschneiden
da Strings immutable, also unveränderlich, sind! :bahnhof:
 
Aber man kann doch an dieser Stelle einen Zeilenumbruch \n oder <br> (html) einführen, so dass es ausschaut als würde der Text an der Stelle abgeschnitten.
 
Nein!

Du kannst höchstens einen neuen String erzeugen, der anstelle der Leerzeichen
\n setzt und die restlichen Zeichen unverändert übernimmt!
 
ich hab nich ganz verstanden was er da macht, daher wollte ich kurz ne Erläuterung. Eben war noch die Rede von nem Stringtokenizer.
 
Ich bin ja immer noch für den StringTokenizer. Damit baust du dir einfach deinen neuen String zusammen. Das würde dann in etwa so aussehen:

neuerString = TextBisLeerzeichen1 + Leerzeichen + TextBisLeerzeichen2 + Leerzeichen + ... + TextBisLeerzeichen5 + Zeilenumbruch

Dann haste deinen neuen String und nach dem 5. Leerzeichen sagst du ihm, dass er ab jetzt in nen neuen String kopieren soll. Du könntest dann sogar ne Abfrage einbauen, damit er nicht zwischen zwei hintereinanderfolgenden Leerzeichen denkt da wäre ein Text und dann nach nur 4 gefühlten Leerzeichen nen Zeilenumbruch macht.

@bienchen84

Das mit dem StringTokenizer war meine Idee und ist vielleicht auch viel aufwändiger als der Ansatz von deathbabyclown, da kenn ich mich noch nicht gut genug aus. 🙂
 
ich hab nich ganz verstanden was er da macht, daher wollte ich kurz ne Erläuterung. Eben war noch die Rede von nem Stringtokenizer.
mein ansatz funktioniert wie gesagt wenn zwischen den worten immer genau 1 Leerzeichen steht.

der ausdruck sagt das es woerter gibt (\w+) gefolgt von einem leerzeichen - und das genau 5x.

d.h.
Java:
1 2 3 4 5 6 7 8 9 0 11 12
wird zu
Java:
1 2 3 4 5 
6 7 8 9 0 
11 12
d.h. er splittet nach dem er das 5.leerzeichen gefunden hat
 
nicht jeder (überhaupt anfänger) ist glücklich mit regex...

ich finde es nicht schlimm, wenn man einen umständlicheren code schreibt, der aber dafür verständlicher ist...

Java:
   public static void main(String[] args){
      System.out.println(split("1 2 3 4 5 6 7 8 9 0 11 12"));

   }
   
   private static String split(String text) {
      String[] parts = text.split(" "); //aufsplitten
      
      StringBuffer result = new StringBuffer();
      //neu zusammen bauen
      for(int i = 1; i < parts.length+1; i++){
         result.append(parts[i-1]);
         if((i%5)==0){//nach jedem 5 Zeichen zeilenwechsel anhängen
            result.append("\n");
         }else{
            result.append(" "); // sonst leerzeichen
         }
         
      }
      return result.toString();  
  }
 
Hallo,

wenn Du magst, probier es mal hiermit. Wenn du es mal im Debugger laufen lässt, dürfte auch das Verständnis keine Schwierigkeiten bereiten.

Gruß,
Ralf

Java:
        String s="Dieser String hier wird bei jedem 5. Leerzeichen geteilt und in kleine Stücke zerlegt";
        String neuerString= null;
        int pointer=0;
        int laenge = s.length();
        int index = 0;

        while (pointer < laenge) {
            for (int i = 0; i < 5; i++) {
                pointer = s.indexOf(' ', pointer + 1);
                if(pointer == -1) {
                    pointer = s.length();
                    break;
                }
            }
            neuerString = new String(s.substring(0, pointer));
            s = s.substring(pointer);
            laenge = s.length();
            pointer=0;
        }
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben