Zahlen aus (String mit zahlen) immer wieder neu auslesen

Stinkybrain

Mitglied
Hallo ich habe ein Textfield wo ein Benutzer per drag'n drop zb.: einen String reinziehen kann.

Danach vergibt er einen Double wert für diesn String der per Entertaste eingelesen wird.
Dieses klappt auch ganz gut mit mehr als einer zahl.

Mein problem ist jetzt wenn ich einen Wert wieder lösche (von hand)
dann ist dieser aber noch gespeichert.

Wie kann ich jedesmal dieses TextField neu auslesen??
Java:
public class ZahlenHandler implements KeyListener{

		@Override
		public void keyPressed(KeyEvent ea) {
			 if (ea.getKeyCode()== KeyEvent.VK_ENTER){			
				 k = taHead.getText();                              // taHead = textfield k = String
				 pHead = Pattern.compile("[+-]?[0-9 .]+");   
				 mHead = pHead.matcher(k);
				 while (mHead.find()){
					 sgHeadweight = k.substring(mHead.start(),mHead.end());
			     }// end while
				 kopfergebnis = sgHeadweight.split(" "); 	 // kopfergebinis ist ein String[]
			     for(int x = 0; x < kopfergebnis.length; x++){   
			    	    headweight = headweight + Double.parseDouble(kopfergebnis[x]);         
			     }// end for 
					 System.out.println(headweight +" Gew");	
	             
				 
			 }
		}

		@Override
		public void keyReleased(KeyEvent ea) {				
		}
		@Override
		public void keyTyped(KeyEvent ea) {	
		}
	
	} // ZahlenHandler
 
Zuletzt bearbeitet:
Also:

Du hast in einem TextField einen String, der da irgendwie reinkommt.
Dieser String besteht aus Zahlen und die sollen dann zu einer Double geparst werden...?

Könntest du evtl. nochmal deinen Code genauer dokumentieren, so kann ich nicht viel erkennen 😉

"headWeight" == ?

Gruß eMmiE
 
headweight soll einen Wert speichern.

das mit Double klappt doch nicht.Bin wieder auf integer umgestiegen.

Im TextFeld Steht dann z.b.: abgenutzer Motoradhelm | 4 == Wert den der benuzer eingibt
mit Enter wird dann bestätigt und dieser Wert wird dann ausgelesen.

bei 2 sachen z.b abgenutze Kappe | 1
verstärkter Kevlarhelm | 3
== Wert 4

Wenn ich jetzt aber einen Wert wieder lösche und dann Enter drücke nimmt er den letzten
eingegebenden Wert und löscht ihn nicht .
Also müssten die Werte immer wieder eingelesen werden.
nur Wie????


Java:
    public class ZahlenHandler implements KeyListener{
     
            @Override
            public void keyPressed(KeyEvent ea) {
                 if (ea.getKeyCode()== KeyEvent.VK_ENTER){         
                     k = taHead.getText();                              // taHead = textfield k = String
                     pHead = Pattern.compile("[+-]?[0-9 .]+");  
                     mHead = pHead.matcher(k);
                     while (mHead.find()){
                         sgHeadweight = k.substring(mHead.start(),mHead.end());
                     }// end while
                     kopfergebnis = sgHeadweight.split(" ");     // kopfergebinis ist ein String[]
                     for(int x = 0; x < kopfergebnis.length; x++){  
                            headweight = headweight + Integer.parseInt(kopfergebnis[x]);  // headweight  soll einfach den Wert Speichern    
                     }// end for
                         System.out.println(headweight +" Gew");   
                     
                     
                 }
            }
     
            @Override
            public void keyReleased(KeyEvent ea) {             
            }
            @Override
            public void keyTyped(KeyEvent ea) {
            }
       
        } // ZahlenHandler
 
Zuletzt bearbeitet:
Was ich damit Meine ist das Das TextFeld immer wieder von vorne Eingelesen werden soll.
was ich meine ist das wenn 3 Werte drinstehen nur diese 3 ausgelesen werden.

wenn ich dann eins lösche das dann eben nur noch 2 eingelesen werden sollen

wenn ich dann wieder eins hinzufüge dann sollen eben wieder 3 Werte eingelesen werden usw.

habe es schon damit versucht das ich die Variable (headweight) am Ende auf 0 setze

aber dann fügt er immer nur eine Zahl die ich gerade geschrieben habe ein.


bin am verzweifeln.

Danke schon mal für die Hilfe..
 
Ich habe gerade mal etwas mit deinem Codeschnipsel gespielt.
Ergebnis:
1. Mit deinem Pattern werden sowohl reine Leerzeichen ziwschen Chars als auch Leerzeichen vor einem Digit gefunden. Im ersten Fall enthält das Array, was durch splitten am " " entsteht, gar keinen zu int parsebaren String, im zweiten Fall schon, allerdings erst an der Position 1. Position 0 enthält einen Leerstring, der natürlich nicht zu einem int geparst werden kann. Wenn du in Zeile 13 bis 15 über das Array drübergehst, muss eigentlich eine NumberFormatException fliegen. Mir ist ehrlich gesagt schleierhaft, wie du ohne exception handling überhaupt etwas sinnvolles aus deiner text area auslesen konntest.

2. Nach Korrektur des o.g. bugs: Natürlich erhältst du nur die letzte Zahl, da nach durchlaufen des while-loops in Zeile 9-11 aus deinem Code nur der letzte match gespeichert wurde!

Ich hoffe dieser Schnipsel ist hilfreich:
Java:
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTest {
    public static void main(String[] args){
        String text = "abgenutze Kappe | 1 helm | 4 lederweste | 2";
        Pattern pHead = Pattern.compile("[+-]?[0-9 .]+");
        Matcher mHead = pHead.matcher(text);
        String sgHeadweight = "";
        String[] kopfergebnis = new String[0];
        int headweight = 0;
        int loop = 0;
        while(mHead.find()){
            sgHeadweight = text.substring(mHead.start(),mHead.end());
            System.out.println("Current head weight '" + sgHeadweight + "' for loop " +loop);
            System.out.println("Indices from " + mHead.start() + " to " + mHead.end());
            loop++;
        }
        kopfergebnis = sgHeadweight.split(" ");
        System.out.println("Kopfergebnis: " + Arrays.toString(kopfergebnis));
        for(int x = 1; x < kopfergebnis.length; x++){//mit 0 als Startwert: NumberFormatException!
            System.out.println("Current x " + x);
            headweight = headweight + Integer.parseInt(kopfergebnis[x]);  // headweight soll einfach den Wert Speichern    
        }// end for
        System.out.println(headweight +" Gew");
        //2. Versuch
        pHead = Pattern.compile("[+-]?[0-9]+");
        mHead = pHead.matcher(text);
        headweight = 0;
        while(mHead.find()){
            sgHeadweight = text.substring(mHead.start(),mHead.end());
            System.out.println("Current head weight '" + sgHeadweight + "' for loop " +loop);
            System.out.println("Indices from " + mHead.start() + " to " +mHead.end());
            loop++;
            try{
                int w = Integer.parseInt(sgHeadweight);
                headweight += w;
            }
            catch(NumberFormatException nfe){
                nfe.printStackTrace();
            }
        }
        System.out.println(headweight +" Gew, 2. Versuch");
    }
}
 
Zuletzt bearbeitet:
Danke!!!!!!!
der Versuch2 hat mir sehr weiter geholfen obwohl ich keine NumberFormatException mit try
umgangen habe. Bei mir klappt es ganz gut.

habe es jetzt Ordentlich getestet und es ist kein mal abgestürzt.
Muss es natürlich noch auf anderen rechner testen. (meiner ist irgendwie komisch🙂 )

Java:
public class ZahlenHandler implements KeyListener{

		@Override
		public void keyPressed(KeyEvent ea) {
	
			 if (ea.getKeyCode()== KeyEvent.VK_ENTER){			 
				 k = taHead.getText();                    // k im programmkopf initialisiert
				 pHead = Pattern.compile("[+-]?[\\d*]+"); // pHead im programmkopf initialisiert
				 mHead = pHead.matcher(k);                // mHead im programmkopf initialisiert
				 headweight = 0;
				 while (mHead.find()){
					 sgHeadweight = k.substring(mHead.start(),mHead.end());  //sgHeadweight im programmkopf initialisiert
				     kopfergebnis = sgHeadweight.split(" ");	             // kopfergebnis im programmkopf initialisiert
			         for(int x = 0; x < kopfergebnis.length; x++){   	
			    	    headweight +=  Integer.parseInt(kopfergebnis[x]);
			    	    spVer.setValue(new Integer(headweight ));  // dies ist um ein JSpinner zu setzen
			        }// end for	    
			     }// end while	    
			       System.out.println(headweight +" Gew");  // dieses ist nicht wichtig war nur zur überprüfung
	
			 }
		}


Danke nochmals!!!!
Werde Morgen mal versuchen das dieses auch mit double geht.
 
Zuletzt bearbeitet:

Zurück
Oben