TextArea voll? - Zahlen raus parsen?

FrazeColder

Lt. Commander
Registriert
Okt. 2013
Beiträge
1.718
Hey Community,

Ich habe da zwei Probleme mit meiner TextArea in meiner GUI. Bisher konnte Ich immer problemlos mit der Methode .append(); etwas in die TextArea dranhängen. Zum Schluss steht immer noch ein"\n", damit das ganze etwas schöner aussieht.
Allerdings bekomme Ich nach der 10. Zeile, keine weitere mehr ausgegeben ... Und ja, die TextArea ist langgezogen.
Also Ich müsste es eigtl. sehen, wenn es dran gehängt wird... -> Wird es aber nicht?

Und Ich müsste aus der TextArea mehrer Zahlen herausparsen. Ich hatte mir überlegt, die TextArea als String zu speichern und dann jeweils mit dem Charakter " " (Leerzeichen) und "%", zu filtern. Da die beiden Charackter die Zahlen umgeben.
Allerdings fällt die Split Methode schon mal raus, da Ich dort nicht angeben kann, splitte immer nach dem und dem Charakter und die .subString() Methode auch, da Ich ja nicht die Zahlen weiß... (An welcher Position sie sind)

Wie kann Ich die beiden Probleme lösen?

Würde mich sehr über Hilfe freuen.
MfG und Danke!
 
Du könntest die Zahlen mit einer regular Expression raus filtern. Um welche Sprache handelt es sich?
In Javascript könnte man das zum Beispiel so machen:
Code:
var pattern = /\d+/g;
var numbers = document.getElementById("myTextarea").value.match(pattern);
numbers ist dann ein Objekt, das die Zahlen aus dem Text enthält.
Das die Textarea voll läuft sollte eigentlich nicht passieren, es sei denn es ist ein Attribut wie "maxlength" gesetzt, um die maximale Anzahl der Charaktere zu begrenzen.
 
Zuletzt bearbeitet:
Es handelt sich um Java.

Sieht man in den Propeties die maxlength? - Denn Ich habe nix geändert!
 
Puh, mit Java hatte ich noch nie was zu tun, vielleicht kriegen wir die Kuh ja vom Eis :)
Laut Oracle Dokumentation gibt's keine maxlength property. Im Konstruktor kann man die Zeilen und Spalten der Textarea mitgeben, hast du das getan? Ändert sich was, wenn du die Anzahl der Zeilen erhöhst?

Edit:
Schau dir das mal an: https://docs.oracle.com/javase/tutorial/uiswing/components/textarea.html
 
Zuletzt bearbeitet:
Das hier sind die einzigen Zeilen Code zur textArea:
Code:
 textArea.setEditable(false);
		textArea.setBounds(315, 31, 176, 280);
		contentPane.add(textArea);

Und wie genau geht das jetzt mit dem String parsen?
 
So müsste es gehen:
Code:
List<Integer> numbers = new ArrayList<Integer>();
String text = textarea.getText();
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(text);
while(m.find())
{
    numbers.Add(Integer.parseInt(m.group()));
}
 
warum .getText() un nicht toString()?
Wieso suchst du nach "\\d+"? - Die Zahlen werden von einem Leerzeichen und einem % Zeichen umgeben... :confused_alt:
 
getText liefert den Text der Textarea, ich weiss nicht was ToString liefert, aber du willst ja den Text bearbeiten. In C# nehme ich immer die Eigenschaft Value order Text (je nachdem welche Control verwendet wird) und nicht die ToString Methode des Objekts.
Brauchst du das Prozentzeichen auch? Wozu das Leerzeichen ertrahieren?

Edit:
Oder willst du nur Zahlen extrahieren, hinter denen ein % steht?
Dann wäre die Pattern "(\\d+)%".

Edit2:
hier: https://regex101.com/ kannst du regular expressions testen. Dann musst du das nicht immer im Code änder und kompilieren usw.
 
Zuletzt bearbeitet:
Ich will alle Double Zahlen nach einem Leerzeichen und vor einem % haben. Beispiel:
"Test test test 564,45%" -> 564,45%

Ich verstehe nicht wie du auf dieses Pattern kommst?
Ich komme auf "([0-9\],+[0-9]+)%"
 
Zuletzt bearbeitet:
Wenn du Doubles willst, ja dann stimmt deine Pattern.
\d ist nur eine Kurzform für [0-9]. Man kann deine Pattern auf so nutzen: (\d+,\d+)%

Die obige Pattern (\d+) würde nur Ganzzahlen zurück liefern und bei doubles nicht anschlagen. Im Fall deines Beispiels also nur 45.
 
Alles klar, vielen Dank!
Java meckert jetzt aber noch herum bei dem Pattern mit:
Code:
 Pattern p = Pattern.compile("\\([0-9\],+[0-9]+)%"); 
-> Invalid escape sequence (valid ones are  \b  \t  \n  \f  \r  \"  \'  \\ )
 
Probiers mal so: Pattern p = Pattern.compile("([0-9]+,+[0-9]+)%");
Java meckert wegen dem \]
 
Zuletzt bearbeitet:
Verwendest du ein JScrollPane?

Davon ab ist das Arbeiten ohne LayoutManager der falsche Ansatz, aber das hatten wir ja schon...
 
Zurück
Oben