# Ascii Zeichen von einem String umwandeln und ausgeben



## Jeykas (6. Apr 2011)

Hallo,

wie kann ich einen String, der aus mehreren Ascii-Zeichen besteht(die durch Kommas getrennt sind) in ihren Buchstaben-WErt umwandeln und in einem JLabel ausgeben?

Hier mein Code soweit :


```
String trenner =",";
String text1 = newnode.getChildNodes().item(3).getChildNodes().item(1).getTextContent();
String[] result = text1.split(trenner);
		
for(String s:result){
   System.out.println(s);
}
```

Die Ausgabe ist dann : 

20
20
20
20
20
20
20
20
20
20

diese sollen jetzt umgewandelt und nebeneinander als buchstaben ( Ich weiß die 20 ist leer in der ascii tabelle aber falls später andere zeichen stehen) in einem JLabel ausgegeben werden....

Habt ihr eine Idee ??


----------



## Volvagia (6. Apr 2011)

Per charAt die Chars from String hohlen und zu int casten.


----------



## Jeykas (6. Apr 2011)

Ja das habe ich schon versucht, aber da kommt dann 
50
48
50
48
50
48
50
48
50
48

-> nämlich die Ascii werte für 
2
0
2
0
2
0

Ich möchte aber das die Zahl zwischen den Kommas also bei
20,20,20,20,20,

als Buchstabe ausgegeben wird, also die ganze 20...


----------



## SlaterB (6. Apr 2011)

System.out.println(s);
->
 System.out.print(s);
 System.out.print(", ");

oder auch Arrays.toString(array)


```
public static String toString(Object[] a) {
        if (a == null)
            return "null";
        if (a.length == 0)
            return "[]";
 
        StringBuilder buf = new StringBuilder();
 
        for (int i = 0; i < a.length; i++) {
            if (i == 0)
                buf.append('[');
            else
                buf.append(", ");
 
            buf.append(String.valueOf(a[i]));
        }
 
        buf.append("]");
        return buf.toString();
    }
```


----------



## Volvagia (6. Apr 2011)

Ach so, falsch herum verstanden. 
Dann musst du natürlich von int nach char casten.


----------



## Jeykas (6. Apr 2011)

So funktioniert es:


```
String trenner =",";
String text1 = newnode.getChildNodes().item(3).getChildNodes().item(1).getTextContent();
String[] result = text1.split(trenner);
	for(String s:result){
		int a = Integer.parseInt(s);
		 char c = (char) a;
		System.out.println(c);
			
	}
```

Zurück zum zweiten Teil meiner Frage :
aber wie schreibe ich die jetzt nebeneinander und gebe sie in einem JLabel aus ?

```
JLabel text8001 = new JLabel();
//text8001 =  ??? Wie weise ich dem den inhalt von c nebeneinander zu ???
```


----------



## Volvagia (6. Apr 2011)

Schau dir mal Slaters Post an.
Oder das:


```
package at.kai.converter;

public class TextToAscii implements ConvertTyp
{
	public String computing(String input)
	{
		StringBuilder resultBuilder = new StringBuilder();
		
		for(int i = 0, size = input.length(); i < size; i++)
		{
			char c = input.charAt(i);
			resultBuilder.append((int)c);
			resultBuilder.append(" ");
		}
		return(resultBuilder.toString());
	}
	public String toString()
	{
		return("Text -> ASCII");
	}
}
```


----------



## Jeykas (6. Apr 2011)

Ich habe es jetzt doch noch hinbekommen, 
aber dabei ist ein anderes Problem aufgetreten...

Hier erstmal Code :

```
String[] result1 = {"29","29","29","29","29","29"};
		
		for(int i=0; i<result1.length;i++){
		String str = result1[i];
		
		int ii = Integer.parseInt(str,16);
		char c = (char) ii;
		System.out.println("char="+c+"<- ");
		
			String s1 = Character.toString(c);
			texttest = new Label(s1);
		
		}
```

Nun steht in meinem Label nur einmal das Zeichen " ) " ...
Obwohl es ja 6 sein sollten... wie muss ich das schreiben ? es will mir grad einfach nicht einfallen


----------



## SlaterB (6. Apr 2011)

verabschiede die bitte generell für alle Zeiten davon, Label oder andere GUI-Objekte ständig neu zu erzeugen, dass sind im Vergleich zu Strings recht komplexe mit hunderten internen Variablen und Verknüpfungen, außerdem hast du Probleme diese in die GUI korrekt einzufügen usw.,

das erste Label ist immer noch gut, da kann man auch den Text ändern..

-----

und dann noch den Kopf benutzen zum Überlegen: was du im Label-Konstruktor oder an setText() übergibst ist der neue Text,
das vorherige wird überschrieben, sammle doch erstmal den ganzen Text in einem String oder StringBuilder zusammen (Beispiele wurden hier sogar schon gepostet)
und ganz am Ende nach allen Schleifen usw. übergibst du das EINE ERGEBNIS an die richtige Stelle


----------



## Andi_CH (6. Apr 2011)

Wenn du den Code vernünftig einrücken würdest, hättest du den Fehler möglicherweise schon gefunden:

Du generierst 6 mal einen String (Zeile 12) und 6 Mal ein Label (Zeile 13). Der String und das Label des letzten Durchlaufs verschwinden sofort im Java-Nirwana und werden vom GarbageCollector vernichtet)


```
private static void gaga() {
		String[] result1 = {"29","29","29","29","29","29"};
		JLabel texttest;

		for(int i=0; i<result1.length;i++){
			String str = result1[i];

			int ii = Integer.parseInt(str,16);
			char c = (char) ii;
			System.out.println("char="+c+"<- ");

			String s1 = Character.toString(c);
			texttest = new JLabel(s1);
		}
	}
```


----------



## asciiman (6. Apr 2011)

Eingabe ist so etwas:


```
"65,65,65,65,65"
```

und Ausgabe dann so etwas:


```
A
A
A
A
A
```

Dann müssen drei Sachen gemacht werden: String entlang dem "," aufteilen, einzelne Teile parsen zu int, einzelne int konvertieren zu char und ausgeben.


```
for (String s : "65,65,65,65,65".split(",")) {
    System.out.println((char) Integer.parseInt(s));
}
```

Das wäre die Kurzform. Es könnte sein, das parseInt() eine Exception gibt oder der Cast unerwünschte Ergebnisse bringt.


----------



## Jeykas (7. Apr 2011)

Ich habe es noch hinbekommen. Was hier falsch verstanden wurde ist, das ich die Ausgabe nicht in der Konsole und untereinander haben wollte, sondern in einem Label nebeneinander.


```
String s1="";
Label texttest = new Label();
String trenner =",";
String text1 = newnode.getChildNodes().item(3).getChildNodes().item(1).getTextContent();
String[] result = text1.split(trenner);
		
for(int i=0; i<result.length;i++){
	String str = result[i];
		
	int ii = Integer.parseInt(str,16);
	char c = (char) ii;
		
	 s1 += Character.toString(c);
			
		
}
texttest = new Label(s1);
```


----------

