Wort in seine Buchstaben zerlegen

Status
Nicht offen für weitere Antworten.

Agent Smith

Mitglied
Hallo !


wie kann man ein Wort in seine Buchstaben "zerlegen" lassen, damit diese Buchstaben einzelnd bearbeitet werden können ? ???:L
Das soll wohl mit einem Sortier Algorithmus gehen. Aber ich weiß nicht welchen ich nehmen soll, es gibt so viele...
 
Du willst also ein Wort wie "Haus" in 'H', 'a', 'u', 's' zerlegen?
Code:
"Haus".toCharArray()
 
Und wie mache ich das mit beliebigen Wörtern ?
Ich will erst mal ein Wort eingeben, dass wird als String umgewandelt und in einem label ausgegeben. So weit bin ich.
Dann soll dieses Wort in dessen Buchstaben zerlegt werden.
Und dann erstmal diese zerlegten Buchstaben getrennt durch ein Komma oder ein Leerzeichen wieder ausgeben.
 
ich hab oben String = a; gesetzt.
Und dann a.toCharArray();
Aber wie gibt der das denn dann getrennt aus ? Wenn ich in nem neuen Label in der Klammer (""+a) mache passiert nichts.
 
Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.lang.String;


public class f extends Applet
{
  TextField textField1 = new TextField();

 String a;
 Label label1 = new Label();
  Label label2 = new Label();
  public void paint(Graphics g)
  {

  }

  public f() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  private void jbInit() throws Exception {

    textField1.setBounds(new Rectangle(53, 64, 176, 26));
    textField1.addActionListener(new f_textField1_actionAdapter(this));
    this.setLayout(null);

    label1.setBounds(new Rectangle(52, 112, 197, 30));
    
    label2.setBounds(new Rectangle(48, 173, 188, 34));
    this.add(textField1, null);
    this.add(label1, null);
    this.add(label2, null);
  }

  void textField1_actionPerformed(ActionEvent e) {
   a = String.valueOf(textField1.getText());
   textField1.setText(""+a);
  label1.setText(""+a);
  
  "a".toCharArray();
  label2.setText(""+a);
  }

}

Von Zeile 42 bis 48.
 
:shock:
Code:
void textField1_actionPerformed(ActionEvent e) { 
   a = textField1.getText(); 
   label1.setText(a); 
   label2.setText(java.util.Arrays.toString(a.toCharArray())); 
}
 
Der hat ein Problem mit "toString" , der sagt :

toString() in java.lang.Object kann auf (char[]) nicht angewendet werden

Ich hab dann oben noch java.lang.Object; eingegeben, aber das Problem bleibt.

Hä ups hab gar nicht gelesen , dass du nicht Merlin bist und gar nicht gepeilt, dass du n komplett anderen Code hast...also nehme ich diesen Post zurück..
 
Auf die Schnelle zusammengebastelt:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class WortInBuchstabenZerlegen extends JFrame {
  // Anfang Variablen
  JTextField jtf = new JTextField();
  JButton jbu = new JButton();
  JLabel jlb = new JLabel();
  // Ende Variablen

  public WortInBuchstabenZerlegen (String Title) {
    // Frame-Initialisierung
    super (Title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing (WindowEvent evt) {System.exit(0);}});
    setSize(300, 300);
    getContentPane().setLayout(new BorderLayout());

    // Anfang Komponenten

    getContentPane().add(jtf, BorderLayout.NORTH);
    jbu.setText("Zerlegen");
    getContentPane().add(jbu, BorderLayout.CENTER);
    jbu.addActionListener (new ActionListener () {
      public void actionPerformed (ActionEvent evt) {
        jbuActionPerformed (evt);}});

    getContentPane().add(jlb, BorderLayout.SOUTH);
    // Ende Komponenten

  }

  // Anfang Ereignisprozeduren
  public void jbuActionPerformed (ActionEvent evt) {
    jlb.setText(java.util.Arrays.toString(jtf.getText().toCharArray()));
  }
  // Ende Ereignisprozeduren

  public static void main (String args[]) {
    new WortInBuchstabenZerlegen("WortInBuchstabenZerlegen").setVisible(true); //show(); in setVisible(true); geändert.
  }
}
 
@merlin2


eh cool...und wo genau zerlegt der die Wörter ? Das Programm ist komplett anders als meins...könnt ich denn nicht meins so umwandeln, dass es auch Wörter zerlegen kann ?
 
Natürlich kannst du auch dein Programm ändern. Aber da du es unvollständig gepostest hast (Klasse f_textField1_actionListener fehlt), habe ich lieber ein neues geschrieben.
Die Zerlegung findet in Zeile 36 statt und verwendet dieselbe Methode zur Zerlegung wie deins.
 
Code:
class f_textField1_actionAdapter implements java.awt.event.ActionListener {
  f adaptee;

  f_textField1_actionAdapter(f adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.textField1_actionPerformed(e);
  }
}

hier ist der Rest. Ich dachte der wäre nicht notwendig....Soll ich also den Befehl von Zeile 36 in meins reinkopieren??
 
Code:
class f_textField1_actionAdapter implements java.awt.event.ActionListener {
  fickdeinemutter adaptee;

  f_textField1_actionAdapter(f adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.textField1_actionPerformed(e);
  }
}

hier ist der Rest. Ich dachte der wäre nicht notwendig....Soll ich also den Befehl von Zeile 36 in meins reinkopieren??

Bei

Code:
(java.util.Arrays.toString(jtf.getText().toCharArray())

"java" sagt der "void" ist nicht erlaubt und bei toString " in java.lang.Object kann auf char[] nicht angewendet werden".


Anonymous hat gesagt.:
Agent Smith hat gesagt.:
Keine Ahnung. So wie ich das hab klappt es. Will nur die eingegebenen Wörter zerlegen.
Was kommt im DOS-Fenster, wenn du das hier ausführst?

java -version

1.6.0.0_3
 
Wie compilierst du das Programm?
Ich frage es, weil der Fehler darauf hindeutet, dass bei dir die java.util.Arrays.toString(char[]) anscheinend nicht
vorhanden ist. Dies ist aber der Fall, wenn man die Version kleiner als 1.5 verwendet oder den Compiler mit
entsprechenden Einstellungen aufruft.
 
Agent Smith hat gesagt.:
Na ja ich benutze normal den JBuilder. Und compiliere auch damit.
Und mit welchen Compiler und vor allem mit welchen Einstellungen wird dein Code compiliert?

Ich vermute hier liegt das Problem. Du hast irgendeine Einstellung im JBuilder (ob es per Default so war oder nicht),
die 1.4.x Code erwartet. Schau doch mal in den Einstellungen nach, was verwendet wird und mit welchen Einstellungen.
 
JBuilder habe ich schon seit Jahren nicht mehr verwendet, aber schau doch mal unter
Project->Project Properties->... oder Tools->Preferences, wie auch immer es dort heisst.
 
Da steht bei JDK : java version 1.4.2_01-b06

Unter Projekt Eigenschaften , dann Erzeugen sind folgende Sachen aufgelistet, die mit x markierten Einstellungen sind
bei mir angehakt:


x Vor Compilieren automatisch speichern
Projekt vor dem Erzeugen aktualisieren
x Quelltext im Ausgabepfad generieren
Erzeugen bei Fehler automatisch abbrechen

Unter Erzeugen-Java steht:

Compiler : Borland Make
Debug Option : Informationen über Quelle, Zeile und Variable
Ziel VM: Java 2 SDK, v 1.2 und höher

Weitere Compiler-Optionen

x Warnungen anzeigen
x Ablehnung anzeigen
Schlüsselwort assert aktivieren
x Ausgabeverzeichnis synchronisieren
 
Installieren und in JBuilder als Compiler einstellen, würde ich sagen.
 
Also der hat das runtergeladen ,aber ich keinen Plan wo das ist.....und wie stellt man das in den JBuilder ein ? Muss mal suchen...der das mit nem Javaprog wo "Ready to download" oder so draufsteht runtergeladen.


Ok habs installiert, und der meint, dass das schon drauf ist. Wie bring ich das denn in den JBuilder rein ?

Der Ordner jdk1.6.0_03 steht hier bereit. Soll ich den einfach durch den alten mit jdk1.4 ersetzen ? Frag lieber nach...

Als hab es versucht zu ersetzen. Dann wollte der den jBuilder nicht starten. Habs rückgängig gemacht. Dann war wieder alles ok.
Dann hab ich sone jdk library Datei von 1.4 durch eine jdk library Datei von 1.6 ersetzt, danach wollte der gar nicht mehr compilieren. Habs dann wieder rückgängig gemacht, danach wieder alles ok. Jetzt weiß ich nicht weiter...
 
Dann hast du irgendeine archaische Version von JBuilder, die mit JDK > 1.4.x nicht umgehen kann.

Ersetze das hier
Code:
(java.util.Arrays.toString(jtf.getText().toCharArray())

durch das hier
Code:
(charArrayToString(jtf.getText().toCharArray()))

private String charArrayToString(char[] c)
{
   StringBuffer b = new StringBuffer(c.length);
   b.append("[");
   for(int i=0; i<c.length; i++)
   {
      if(i > 0)
      {
         b.append(", ");
      }
      b.append(c);
   }
   b.append("]");
   return b.toString();
}
oder verwende Eclipse, statt JBuilder. Ist sowieso besser und kostet nix.

Siehe: http://www.eclipse.org/downloads/
 
Also...ich hab jetzt was ganz anderes ausprobiert...:

Code:
void textField1_actionPerformed(ActionEvent e) {
        a = String.valueOf(textField1.getText()); //übernimmt den Text
        label1.setText(""+a);                     //gibt den eingegebenen Text aus
        i = a.length();                           //ermittelt die Länge der Eingabe
        label2.setText(""+i);                     //gibt die Anzahl der Buchstaben an              
        char[] zeichen= new char[i];              // Array-Feld erstellt
        char a = zeichen[0];                      //soll den ersten Buchstaben packen
        label3.setText(""+a);                     //soll den ersten Buchstaben zeigen

Nur...der erste Buchstabe ist für den ein Rechteck...(egal der wievielte Buchstabe...das macht der bei allen Indices..). Der gibt so'n kleines Rechteck aus, so wie wenn der ein Zeichen nicht kennt.
 
Bei der Deklaration von zeichen wird das Array zwar angelegt, aber den einzelnen Zeichen wird kein Inhalt zugewiesen. Daher haben alle Zeichen den Wert (char)0, was kein druckbares Zeichen ist und daher bei der Ausgabe im GUI zu diesem kleinen Quadrat führt.
Vielleicht solltest du an der Steller besser
Code:
char[] zeichen = a.toCharArray();
schreiben.

Und was bezweckst du damit:
Code:
a = String.valueOf(textField1.getText());

Eigentlich sollte
Code:
a = textField1.getText();
doch reichen.
 
@merlin2: Falls es noch nicht zur Sprache kam, hier noch ein kleiner Hinweis:
Die show()-Methode ist deprecated, es sollte nur noch setVisible(true) verwendet werden.
 
Aber wie mache ich das, dass der jeden einzelnen Buchstaben ausgibt ? Ich habe jetzt eine For-schleife reingepackt. Jetzt zeigt der den letzten Buchstaben an.

Code:
 void textField1_actionPerformed(ActionEvent e) {
        a = textField1.getText();
        label1.setText(""+a);
        i = a.length();
        label2.setText(""+i);
        char[] zeichen = a.toCharArray();
       for (int k=0; k<i;k++)
       {
         char a = zeichen[k];                
         label3.setText("" + a);                //gibt den letzten Buchstaben aus
         
       }

  }
 
Du gibst in der Schleife nacheinander alle Buchstaben aus, wobei immer der zuletzt gesetzte den alten Inhalt überschreibt - so bleibt am Ende natürlich nur der letzte stehen.
 
L-ectron-X hat gesagt.:
@merlin2: Falls es noch nicht zur Sprache kam, hier noch ein kleiner Hinweis:
Die show()-Methode ist deprecated, es sollte nur noch setVisible(true) verwendet werden.
Das weiß ich, trotzdem danke für den Hinweis. 🙂
Da ich die GUI aber nicht von Hand erstellt habe, sondern ein Werkzeug benutzt habe, das leider show(); verwendet, habe ich vergessen, das in setVisible(true); zu ändern. 😳
Ich ändere den Code jetzt.
 
@Agent Smith: Schreib folgendes in Zeile 11 deines Codes:
Code:
label3.setText(label3.getText().concat(a));
 
Der sagt contact oder concat kann auf char nicht angewendet werden.
Außerdem habe ich vor, dann auf jeden einzelnen Buchsteiben zugreifen zu können... :?
Ich hab noch ne Methode reingepackt, damit die einzelnen Buchstaben nacheinander nach ungefähr einer Sekunde ausgegeben werden.
Und wenn man ein neues Wort eingeben will, löscht die alte Ausgabe nicht und hängt das Neue dran...(naja das ist nicht so tragisch, weil ich jetzt einfach ein Button eingesetzt hab, der den Inhalt vom Label wieder löscht..)
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben