Text, Klammern entfernen

hi,
ich hab nur ein kleines Problem. Trotzdem erläter ich mal alles damit ihr mit klar kommt was ich vor habe. Also ich hab ein 2 Dim char[][] in dem ein Text gespeichert ist.So diesen hab ich dann vertikal abgelesen und in einem ArrayList gespeichert.Soweit so gut.
Nun hab ich in meiner Liste sowas stehen a,s,d,[],s,a,d,s,[],d . Ich möchte jetzt diese Leeren [] rauss nehmen. Ich bin jetzt sovorgeganen.

public static StringBuilder geheimTextFull(ArrayList<Objekt> liste,
            String schluessel, String klartext) {

        ArrayList<Character> tempAusgabe = new ArrayList<Character>();

        tempAusgabe = geheimText(liste, schluessel);

        StringBuilder sb = new StringBuilder();

        char c = ' ';//geht nicht
        for (int i = 0; i < klartext.length(); i++) {
            if (tempAusgabe.get(i) == c) {//geht  nicht

                
            } else {
                sb.append(tempAusgabe.get(i));
            }
        }

        return sb;

    }


Hilfe oder eine Alternative fänd ich sau cool.

char c = ' ';//geht nicht
Doch, das geht. Oder was für eine Fehlermeldung bekommst du?

if (tempAusgabe.get(i) == c) {//geht nicht
Geht schon, macht aber wohl nicht das was du willst :wink: Nicht-primitive Datentypen (und Character als Klasse ist solch einer) vergleicht man per equals.

ich bekomme die Dinger immer noch nicht raus…

Da tempAusgabe eine Liste von Charactern ist und List, bzw. ArrayList eine Methode remove hat geht auch folgendes.

http://docs.oracle.com/javase/6/docs/api/java/util/List.html#remove(java.lang.Object)

while(tempAusgabe.remove(' '));
//Danach sollten alle Leerzeichen entfernt sein
for(char c: tempAusgabe) {
  sb.append(c);
}```

Was sind das für “Dinger” oben sprichst Du von einem char[][] das gar keine Leerzeichen enthält. Im code ist eine Liste aus der Leerzeichen entfernt bzw. nicht übertragen werden sollen?

[ol]
[li]while(tempAusgabe.remove(’ '))!=null; [/li][li]//Danach sollten alle Leerzeichen entfernt sein [/li][li]for(char c: tempAusgabe) { [/li][li] sb.append©; [/li][li]}[/li]

fehlt das nicht != null

da mekert er bei mir nehmlich
[/ol]

[QUOTE=bauersuchtfrau][ol]
[li]while(tempAusgabe.remove(’ '))!=null; [/li][li]//Danach sollten alle Leerzeichen entfernt sein [/li][li]for(char c: tempAusgabe) { [/li][li] sb.append©; [/li][li]}[/li]

fehlt das nicht != null

da mekert er bei mir nehmlich
[/ol][/QUOTE]
Das ist ja auch nicht der Code, den Majora gepostet hat. remove gibt ein boolean zurück. vgl. API Doku

ich hab das mal so umgewandelt

bekomme aber index out of bounds
Java Code:

[ol]
[li]for(int i = 0;i <tempAusgabe.size();i++){ [/li][li] tempAusgabe.remove(’ '); [/li][li] } [/li][li] // Danach sollten alle Leerzeichen entfernt sein [/li][li] for (char c : tempAusgabe) { [/li][li] sb.append©; [/li][li] } [/li][/ol]

und warum?

weil ich kein plann hab warum das nicht läuft. ein boolean wird erwartet also muss != oder == eingebaut werden die aber was soll die wheil-schleife ausführen

Java Code:

[ol]
[li]public static String geheimTextFull(ArrayList liste, [/li][li] String schluessel) { [/li][li] ArrayList tempAusgabe = new ArrayList(); [/li][li] tempAusgabe = geheimText(liste, schluessel); [/li][li] StringBuilder sb = new StringBuilder(); [/li][li] for(int i = 0;i <tempAusgabe.size();i++){ [/li][li] if(tempAusgabe.get(i).equals(’ ‘))**// das geht nicht ** [/li][li] tempAusgabe.remove(’ '); [/li][li] } [/li][li] // Danach sollten alle Leerzeichen entfernt sein [/li][li] for (char c : tempAusgabe) { [/li][li] sb.append©; [/li][li] } [/li][li] return sb.toString(); [/li][li] } [/li][/ol]

Ich hab dir mal ein kleines selbst Laufendes Beispiel erstellt, dass die wichtigen Punkte hervorhebt. Das remove(’ ') macht tatsächlich Probleme, weil hier ein Character statt char erwartet wird. So funktioniert es aber

import java.util.ArrayList;

public class RemoveSpace{

    public static void main(String[] args){
        //Args in Liste von Chars einlesen
	List<Character> tempAusgabe = new ArrayList<>();

	for(char c: args[0].toCharArray()){
	    tempAusgabe.add(c);
	}

        //Leerzeichen entfernen aus Liste von Chars
	Character SPACE = ' ';
	while(tempAusgabe.remove(SPACE));

        //Liste von Chars ohne Leerzeichen in StringBuffer schreiben
	StringBuilder sb = new StringBuilder();
	for(char c: tempAusgabe){
	    sb.append(c);
	}

	System.out.println(sb);
    }
}```

Ergibt folgende Ausgabe:

$ java RemoveSpace “Das ist ein Test”
DasisteinTest

1:1 übernommen. Läuft leider nicht. Was heißt es läuft nicht. Es gibt keine Fehler Meldung aber die [] sind nicht draussen

Java Code:

[ol]
[li]public static String geheimTextFull(ArrayList liste,[/li]
[li] String schluessel) {[/li]
[li] [/li]
[li] ArrayList tempAusgabe = new ArrayList();[/li]
[li] [/li]
[li] tempAusgabe = geheimText(liste, schluessel);[/li]
[li] [/li]
[li] StringBuilder sb = new StringBuilder();[/li]
[li] [/li]
[li] Character sPACE = ’ ';[/li]
[li] while(tempAusgabe.remove(sPACE));[/li]
[li] [/li]
[li] // Danach sollten alle Leerzeichen entfernt sein[/li]
[li] for (char c : tempAusgabe) {[/li]
[li] sb.append©;[/li]
[li] }[/li]
[li] [/li]
[li] return sb.toString();[/li]
[li] [/li]
[li] }[/li]
[/ol]

Möchtest du Leerzeichen entfernen oder Klammern?

Es wird mir ja als [] angezeigt . Wieso liegt einfach dadran das ich z.b ein char[] array = new char [3]. Ich hab aber nur 2 Elemente eingefügt . Die restlichen werden mir als [] oder keine Ahnung was angezeigt.

Um mal herauszubekommen, was dort eigentlich steht ersetze mal das

sb.append(c);

mit

sb.append("|"+(int)c);

Welche “|” ist ein Trennzeichen.
Das Wandelt chars in int.

Welche Zahl steht denn an der bestimmten Stelle?

hier so was kommt bei mir rauss :
|114|110|101|114|0|101|103|110|102|0|105|114|115|114|116|100|101|117|108|0|110|115|112|116|0|110|118|101|111|0|101|100|116|109|0|116|101|97|101|0|102|110|116|110|0|102|117|101|105|0

kann es sein, dass es sich gar nicht um Klammern handelt, die Du da siehst?
ASCII 0 ist kein Buchstabe der Rest scheint ja im Bereich der Kleinbuchstaben zu liegen. Du musst also diese Zeichen bzw. 0 aus Deiner List entfernen - keine Ahnung wie das da rein kommt (Vielleicht beim Verschlüsseln in geheimText(…)?). Weder hat das was mit Leerzeichen, Klammern und vermutlich auch nichts mit Arrays zu tun.

Also es funktioniert auch nicht wenn ich space = ‘0’ setze.
Hier ist mein gnazes Projekt. Im Kommentar hab ich hinterlegt wo wir grade stehen…

	// --------------------Vertikal einlesen
	HashMap<Integer, ArrayList> test = new HashMap<Integer, ArrayList>();
	test = vertikal(a, beispiel, klartext);
	// -das Problem
	ArrayList<Objekt> testListe = new ArrayList<Objekt>();
	testListe = liste(a, beispiel, klartext);
	System.out.println(testListe.get(0).getText());
	ArrayList<Character> testAusgabe = new ArrayList<>();
	testAusgabe = geheimText(testListe, beispiel);
	System.out.println("test Ausgabe :");
	System.out.println(testAusgabe.toString());
	System.out.println(testAusgabe.get(1));// so ausgben
	String test22 = null;
	test22 = geheimTextFull(testListe, beispiel);
	System.out.println("Stringbuilder TEST");//hier sind Wir -> Forum!!!!!!!
	System.out.println(test22);
}
// Klartext in CharArray
public static char[][] textChar(String text, String schlüssel) { 
	int zeilenanzahl;
	if (text.length() % schlüssel.length() != 0) {// bei rest
		// aufruden +1
		zeilenanzahl = text.length() / schlüssel.length() + 1;// aufrunden
	} else {// grade zahl
		zeilenanzahl = text.length() / schlüssel.length();
	}
	int laengeSch = schlüssel.length();
	int laengeTXT = text.length();
	char[] temp = text.toCharArray();
	System.out.println(temp.length);
	char[][] tabelleText = new char[zeilenanzahl][laengeSch];
	// temp(CharArray) durchlaufen ->k
	int k = 0;
	for (int j = 0; j < zeilenanzahl; j++) {
		for (int i = 0; i < laengeSch; i++) {
			// Out of Bounds vermeiden. Grenze Array erreicht.
			if (k == temp.length) {
				break;
			} else {
			}
			tabelleText[j]** = temp[k];
			k++;
		}
	}
	return tabelleText;
}
// vertikela HashMap klartext ausgabe
public static HashMap<Integer, ArrayList> vertikal(char[][] klarTextarray,
		String schlüsslWort, String text) {
	int zeilenanzahl;
	if (text.length() % schlüsslWort.length() != 0) {// bei rest
		// aufruden +1
		zeilenanzahl = text.length() / schlüsslWort.length() + 1;// aufrunden
	} else {// grade zahl
		zeilenanzahl = text.length() / schlüsslWort.length();
	}
	char[][] zubearbeiten = klarTextarray;
	HashMap<Integer, ArrayList> textVertikalMap = new HashMap<>();
	for (int i = 0; i < schlüsslWort.length(); i++) {
		ArrayList<Character> vertikalTEXT = new ArrayList<>();
		for (int j = 0; j < zeilenanzahl; j++) {
			vertikalTEXT.add(zubearbeiten[j]**);
			textVertikalMap.put(i, vertikalTEXT);
		}
	}
	return textVertikalMap;
}
// --- Objekt speichern schwarzwald
public static ArrayList<Objekt> liste(char[][] klarTextarray,
		String schlüsslWort, String text) {
	ArrayList<Objekt> liste = new ArrayList<Objekt>();
	HashMap<Integer, ArrayList> dieMap = vertikal(klarTextarray,
			schlüsslWort, text);
	// dieMap.get(0); charrArry
	for (int i = 0; i < schlüsslWort.length(); i++) {
		liste.add(new Objekt(schlüsslWort.charAt(i), dieMap.get(i)));
	}
	return liste;
}
public static ArrayList<Character> geheimText(ArrayList<Objekt> liste,
		String schluessel) {
	ArrayList<Objekt> tempListe = new ArrayList<Objekt>();
	tempListe = liste;
	ArrayList<Character> tempAusgabe = new ArrayList<>();
	for (char c = 'a'; c <= 'z'; c++) {
		for (int i = 0; i < schluessel.length(); i++) {
			if (c == tempListe.get(i).getKey()) {
				tempAusgabe.addAll(tempListe.get(i).getText());
			}
		}
	}
	return tempAusgabe;
}
public static String geheimTextFull(ArrayList<Objekt> liste, // Hier sind wir!!!
		String schluessel) {
	ArrayList<Character> tempAusgabe = new ArrayList<Character>();
	tempAusgabe = geheimText(liste, schluessel);
	StringBuilder sb = new StringBuilder();
	Character sPACE = '0';
	while (tempAusgabe.remove(sPACE))
		;
	// Danach sollten alle Leerzeichen entfernt sein
	for (char c : tempAusgabe) {
		sb.append("|"+(int)c);
	}
	return sb.toString();
}```
 Hier auch das Objekt damit hab ich mein ganzes Projket offengelegt:
Java Code:

[ol]
[li]**public** **class** Objekt { [/li][li]    **private** char key; [/li][li]    **private** [ArrayList](http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+arraylist) text; [/li][li]    **public** Objekt(char key, [ArrayList](http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+arraylist) text){ [/li][li]        **this**.key = key; [/li][li]        **this**.text = text; [/li][li]    } [/li][li]    **public** char getKey(){ [/li][li]        **return** key; [/li][li]    } [/li][li]    **public** [ArrayList](http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+arraylist) getText(){ [/li][li]        **return** text; [/li][li]    } [/li][/ol]

oben der Teil ist eine abgeschnittene Main. Weil das sonst zu groß wäre. Ich weiss auch nicht wieso das Forum das alles jetzt so eingerückt hat …

Weil ja auch keine 0 als Character sondern nur als Wert vorkommt.
Der Code ist mir zu wirr und zu mühsam durch zu schauen, aber vermutlich würde ein ...space = (char)0; schon ausreichen.