Leerzeichen im char Array setzen

chillerStudent

Bekanntes Mitglied
Guten Tag,

wenn ich z.b. einen String habe, den ich zu einem char array umwandele. Das char array bearbeite ich und konvertiere wieder zu einem String.
Wie schaffe ich es, dass die leerzeichen trotzdem enthalten sind?

z.b.

Java:
String st = "";
for(int i=0; i<args.length; i++) {
	st += args[i];
}
char[] a = st.toCharArray();
//...

String g = new String(a);
System.out.print(g);

Es muss aber nicht sein, dass es am Ende wieder zu String umgewandelt wird. Hauptsache die leerzeichen sind enthalten.
 
also was auch immer dein for()-loop da machen soll ... würde ich definitiv anderst lösen ...

ansonsten : String.toCharArray() entfernt whitespaces 0x20 ? ... nicht das mir das bekannt wäre ... liegt wahrscheinlich an dem code mit dem du das char-array manipulierst ...

ist aus dem stück code da leider nicht ersichtlich
 
Wo verschwindenen die Leerzeichen. Nichts aus dem von Dir gezeigten Code lässt Leerzeichen aus einem String oder einem char-Array verschwinden.

Gib doch einfach mal direkt nach der Schleife
Code:
st
auf der Konsole aus. Vermutlich wirst Du entgegen Deiner Erwartung (woher die auch immer kommt) keine Leerzeichen finden.
 
und mit code:
Java:
    public static void main(String[] args)  {
        String s = "H A L L O";
        char[] c = s.toCharArray();
        String t = new String(c);
        System.out.println(t); // Ausgabe: H A L L O
    }
 
Dein Problem dürfte sein, dass in args keine Leerzeichen vorhanden sind, da die args durch Leerzeichen bei der Eingabe getrennt sind.

Das heißt die Eingabe: Argument1 Argument2
ergibt: args[0] = "Argument1"; args[1] = "Argument2"; --> kein Leerzeichen
 
Gib doch einfach mal direkt nach der Schleife st auf der Konsole aus. Vermutlich wirst Du entgegen Deiner Erwartung (woher die auch immer kommt) keine Leerzeichen finden.
Ich möchte nicht das st ausgeben sondern das char array.


Ohh, sorry sorry, ich hab da was ganz wichtiges vergessen.

Vergisst bitte den ersten code: hier der neue
Java:
StringBuffer b = new StringBuffer();
for(int i=0; i<args.length; i++) {
			b.append(args[i]);
		}
char[] a = b.toString().toCharArray();

//...

String g = new String(a);
System.out.print(g);
 
Wenn du schon einen Builder verwendest, dann bitte gleich ohne Stringkonkatenationen:
Java:
for(int i = 0; i < args.length; i++) {
    b.append(args[i]);
    b.append(' ');
}
Zusätzlich kannst du aber das Leerzeichen am Schluss (oder Anfang) weglassen:
Java:
for(int i = 0; i < args.length; i++) {
    if (i != 0) {
        b.append(' ');
    }
    b.append(args[i]);
}
Oder wenn du es nachträglich mit [c]trim()[/c] machen willst:
Java:
for(String value : args) {
    b.append(value);
    b.append(' ');
}
String str = b.toString().trim();
Da verlierst du aber natürlich auch allfällige Leerzeichen am Anfang des ersten bzw. am Ende des letzten Parameters.
 
Ich hab da mal noch eine Frage. Aber möchte jetzt nicht ein neues Thema anfangen.

Wenn z.b. in einem wort wie "otto" zwei mal hintereinander der gleiche Buchstabe vorkommt wie schaffe ich es dass es nur einmal am ende ausgegeben wird: "oto"

Gibt es in java eine delete funktion für char?
 
Arrays sind starre Konstrukte. Einmal angelegt sind sie in Ihrer Aufnahmekapazität fix.
Aus einer List wäre ein Löschen möglich.
Bei einem Array könnte man die Inhalte verschieben z.B. bei
Code:
o t t o
den Inhalt von Index 2 mit dem Inhalt von Index 3 überschreiben. Allerdings wäre das Array immer noch vier Felder lang und man müsste die Inhalte z.B. per System.arraycopy(...) oder einer Schleife in ein neues char[3] kopieren.

Wenn es allerdings wie beschrieben um die Ausgabe geht recht es sich den zuletzt ausgegebenen Buchstaben zu merken und falls der darauf folgende Buchstabe gleich ist diesen einfach nicht auszugeben.
 
ok. verstehe. So?

Java:
StringBuffer b = new StringBuffer();
for(int i=0; i<args.length; i++) {
            b.append(args[i]);
        }
char[] a = b.toString().toCharArray();
 
//...
if(a[i+1] == a[i]) {
 a[i+1] = ' ' ; // ???
 }
String g = new String(a);
System.out.print(g);
 
so würde es gehen:

Java:
        char[] a = new char[4];
        a[0] = 'O';
        a[1] = 't';
        a[2] = 't';
        a[3] = 'o';
       
        for(int i = 0; i < a.length; i++)
        {
            if(i<a.length-1)
            {
                if(a[i] != a[i+1])
                {
                    System.out.print(a[i]);
                }
            }else
            {
                System.out.print(a[i]);
            }
        }
        System.out.println();
 
meinst du sowas:

Java:
        char[] a = new char[2];
        a[0] = 'b';
        a[1] = 'c';

oder was?

Nein, ich meine sowas:

Java:
char[] a = new char[2];
        a[0] = 'bc'; // natürlich falsch

Also wenn ich ein String in ein char array umwandele soll er die letzten zeichen die zusammen gehören
nicht trennen.
zb.
Java:
String s = "ich lerne java";
StringBuffer sb = new StringBuffer(s);
char[] c = sb.toString().toCharArray();

Das letzte wort "java" soll nicht in einzelne zeichen getrennt werden.
 
Das letzte Wort eines Strings kannst du mit

Java:
String s="Hallo Java";
String java = s.substring(s.lastIndexOf(" ")+1);
System.out.println(java);


erhalten
 
geht nicht wenn ich sowas hab

Java:
for(int i=0; i<args.length; i++) { 
			b.append(args[i]+" ");
		}
		String java = b.substring(b.lastIndexOf(" ")+1);
		System.out.println(java);
 
ich glaub ich verstehe diese zeile nicht richtig:

b.substring(b.lastIndexOf(" ")+1);

was macht lastIndexOf ?

lastIndexOf sucht nach dem Zeichen (" ") und zwar nach dem letzten Vorkommen

Beispiel "Ich lerne Java", hier wäre es das Leerzeichen vor "Java"!
+1 er soll ein Zeichen später anfangen, hier das "J"

Dein Problem ist deine Strings sehen so aus "Ich lerne Java ", da ist das letzte " " nach dem "Java", deshalb funktioniert es bei dir nicht. Aber am Anfang dieses Thread haben wir dich schon darauf hingewiesen, dass letzte Leerzeichen zu entfernen. Du hast in diesem Thread alles, was du brauchst.
 
Sehr schön. Habe verstanden.
Also muss ich subtrahieren.

Nein, du musst das letzte Leerzeichen entweder entfernen oder dafür sorgen, dass es gar nicht erst entsteht.

substring(startindex); --> hier wird aus einem String/StringBuffer der Teil ausgewählt ab dem startindex bis zum Ende. Das +1 steht dafür, dass das Leerzeichen nicht mit ausgewählt wird, sondern erst ein Zeichen später angefangen (+1) wird.
 
Edit: Seite 2 nicht gesehen :lol:

Edit2: Wofür steckst du denn alle args in einen String, um danach wieder das letzte Wort (das letzte arg) rauszuholen?
 
Zuletzt bearbeitet:

Zurück
Oben