Input/Output Leerzeichen aus String entfernen - klappt nicht!

HolyFUT

Mitglied
Hallo zusammen,
ich stoße gerade auf ein recht frustrierendes Problem und weiß hier nicht mehr weiter.

Ich habe einen WebSocket Server, geschrieben mit der Jakarat und Tyrus API. Meine Anfragen an den WebSocket Server werden mittels JavaScript in einer HTML gesendet. In meiner HTML Datei habe ich ein Formular mit zwei Eingabefelder. Eines in dem man seinen Benutzername angeben kann und eines für eine Textnachricht. Die Daten werden als JSON Objekt an meinen WebSocket Server gesendet. Ich möchte nun die Textnachricht auswerten und zwischen einem Chatbefehl, der mit einem Slash eingeleitet wird, oder einer normalen Textnachricht unterscheiden.

Zuerst empfange ich die Client Eingabe über meine Annotation @OnMessage

Java:
@OnMessage
public void onMessage(JsonObject data, Session session) {
    String message = data.get("chatInput").toString();
    Command command = new Command().listenForCommands(message);
 }

Hier kann man schon sehen, dass meine Methode onMessage ein JsonObject erwartet. In der ersten Zeile möchte ich eine neue Variable namens message mit dem JsonValue, der als String gecastet wird, aus dem JsonObject der Chatnachricht (dessen Key chatInput lautet) initialisieren. Anschließend instanziiere ich meine Klasse Command und rufe die Methode listernForCommands auf. Diese Methode soll nun, in der Theorie, den Unterschied zwischen Chatbefehl und normaler Textnachricht herausfinden.

Meine Nachricht sieht beispielsweise so aus: " A " (ohne die Anführungszeichen!)

Zunächst wollte ich aber die unnötiges Whitespaces, links vor Anfang des ersten Characters und Rechts nach letzten Character, rauslöschen indem ich den Befehl trim() verwende.

Code:
 public Command listenForCommands(String message) {
     message = message.trim();
}

Das klappt jedoch nicht, hier werden gar keine Whitespaces entfernt.

Ich habe es anschließend mit str.replaceAll probiert.

Code:
public Command listenForCommands(String message) { 
     message = message.replaceAll(" ", message);
}

Das hat auch nicht geklappt, ich habe hier auch mehrere regex Optionen verwendet: \t, \n, \r, \n (alle mit doppelten Backslash)

Ich habe es auch mit folgenden Unicode characters als Regex probiert: \u0009, \u000A, \u000B
Oder auch das hier: \\s
Letzteres gibt mir das hier aus: "" A"" A"A"

Ich weiß nicht mehr wirklich weiter, wie kann ich dieses Problem am besten angehen?
 
Y

yfons123

Gast
Das hat auch nicht geklappt, ich habe hier auch mehrere regex Optionen verwendet: \t, \n, \r, \n (alle mit doppelten Backslash)
für führende und folgende leerzeichen funktiniert definitiv trim

dein string replace all wäre blöd für deine commands, da du eig nur nach gewissen kriterien sachen entscheiden kannst ohne in komplexität zu eskalieren
 

HolyFUT

Mitglied
Doch, werden sie. Der Parameter message innerhalb der Methode zeigt anschließend auf einen String ohne führende und abschließende Leerzeichen.
Moin, dass tut er leider nicht. Ich habe das Ergebnis ja geprüft :D

Was ich festgestellt habe:
Java:
System.out.println(command.listenForCommands(" Hallo !"));
System.out.println(command.listenForCommands(message));
Zeile 1 entfernt mit trim die führenden und abschließenden Whitespaces
Zeile 2 hingegen nicht...

1653231101284.png

Was hat es mit den Anführungszeichen in der Konsolen-Ausgabe auf sich? Sind das vielleicht die Anführungszeichen des JSON Objekt?

Eine weitere Info:
str.replaceAll funktioniert! Ich hab im zweiten Parameter meine message Variable als replacement angegen... Ich würde aber gerne trim verwenden.
 

HolyFUT

Mitglied
ja aber wenn du ein command terminal oder allgemein ocommandos mit parameter bauen willst dann willst du die leerzeichen haben
Korrekt, deswegen wollte ich auch str.replaceAll nicht verwenden :D Wobei ich hier natürlich auch die einzelnen Nachrichten in Arrays auslagern und dann validieren kann.

wahrscheinlich hast du da was an der übermittlung versaubeutelt
Mh, weiß du vielleicht was?

Javascript:
const chatInput = (chatValue ? chatValue : "");
const username = (usernameValue ? usernameValue : "guest");
userData = { "username": username, "chatInput": chatInput };
sendWebSocketMessage(JSON.stringify(userData));

Für mich siehts erstmal wie ein normales JSON Objekt aus...
 

KonradN

Super-Moderator
Mitarbeiter
Was mir auffällt: Du sagst, dass es keine führenden Quotes gibt:
Meine Nachricht sieht beispielsweise so aus: " A " (ohne die Anführungszeichen!)
Aber bei der Ausgabe zeigst Du uns, dass die erste Zeile keine Quotes hat, die zweite aber schon. Da der Aufruf der Gleiche ist, kommen die Quotes der Ausgabe nicht vom Code, der die Ausgabe macht. Somit müssen diese noch Teil von message sein. Wenn da Quote Zeichen sind, dann macht trim() natürlich nichts, denn erstes und letztes Zeichen ist ein Quote und kein Leerzeichen.
 

HolyFUT

Mitglied
Wenn du einen Wert, der bereits ein String ist, mittels JSON.stringify() als JSON kodierst, dann hat das Ergebnis natürlich Anführungszeichen, weil das eben Teil der Kodierung eines strings in json ist.
Ein JSON String hat immer Anführungszeichen.
Moin,
also mit JSON.stringify kodiere ich ja nichts zu JSON, sondern codiere es zu einem JSON-String. Und einen String kodiere ich ebenfalls nicht, in dem Fall kodiere ich ein JavaScript Objekt in einen JSON-String.
Aber bei der Ausgabe zeigst Du uns, dass die erste Zeile keine Quotes hat, die zweite aber schon.
Danke für die Info, dass mit den Quotes hatte ich jetzt auch festgestellt nachdem mir yfons dazu was gesagt hatte. Ich habe jetzt mal in meinem Server die Anführungszeichen mittels replaceAll entfernt und das Ergebnis getrimmt - jetzt funktioniert es. Müsste jetzt nur schauen wie ich meine Übermittlung gedeichselt kriege, denn ich würde gerne ohne dem replaceAll auskommen, kann ja sein dass die Nachricht auch eben Anführungszeichen beinhalten kann.

Edit: Ich dachte die Quotes werden von Java ausgegeben, weil es sich hier um ein String handelt haha
 
Zuletzt bearbeitet:

mihe7

Top Contributor
also mit JSON.stringify kodiere ich ja nichts zu JSON, sondern codiere es zu einem JSON-String.
Gut, wenn Du auf genaue Bezeichnungen achtest (im MDN ist das auch ungenau). Im ECMAscript-Standard wird hier allerdings zwischen JSON Text und JSON String unterschieden.

"X" wäre gültiger JSON Text, der einen JSON-String darstellt. {} wäre gültiger JSON Text, der ein JSON-Objekt darstellt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Leerzeichen im String entfernen Java Basics - Anfänger-Themen 6
S Leerzeichen zwischen zwei Zeichen im String entfernen Java Basics - Anfänger-Themen 19
J Alle Leerzeichen aus String entfernen Java Basics - Anfänger-Themen 13
C Leerzeichen aus String entfernen Java Basics - Anfänger-Themen 8
B String nach erstem Leerzeichen trennen Java Basics - Anfänger-Themen 7
O String Methode für längste Sequenz von Leerzeichen Java Basics - Anfänger-Themen 35
J am Anfang eines String ein Leerzeichen löschen Java Basics - Anfänger-Themen 6
M (Leerzeichen) zu einem gesuchten String Java Basics - Anfänger-Themen 4
H String mit Leerzeichen in Variablen zerlegen Java Basics - Anfänger-Themen 4
M String vergleichen - Leerzeichen Ignorieren? Java Basics - Anfänger-Themen 4
P int-Werte im String (mit Hilfe vom Leerzeichen) trennen? Java Basics - Anfänger-Themen 2
D Wort nach Leerzeichen - String Java Basics - Anfänger-Themen 10
G String in Array einfügen, leerzeichen! Java Basics - Anfänger-Themen 2
G Leerzeichen in String einfügen Java Basics - Anfänger-Themen 1
H wie spreche ich durch leerzeichen im string neuen index an Java Basics - Anfänger-Themen 10
I String mit Leerzeichen einlesen Java Basics - Anfänger-Themen 3
G String mit next()-Methode einlesen - keine Leerzeichen! Java Basics - Anfänger-Themen 11
F Leerzeichen in einen String einfügen. Java Basics - Anfänger-Themen 15
S Einen langen String beim Leerzeichen in zwei Strings zerlege Java Basics - Anfänger-Themen 3
T String Leerzeichen wegschneiden Java Basics - Anfänger-Themen 2
melaniemueller setCharAt Leerzeichen zusätzlich einfügen Java Basics - Anfänger-Themen 8
A 1 Leerzeichen durch zwei Leerzeichen ersetzen Java Basics - Anfänger-Themen 4
A Löschen von Leerzeichen in einem char array ohne methoden Java Basics - Anfänger-Themen 6
M Warum werden character, die Leerzeichen sind, nicht korrekt verarbeitet? Java Basics - Anfänger-Themen 2
O Methode über Leerzeichen Java Basics - Anfänger-Themen 13
D jsoup get class name mit leerzeichen Java Basics - Anfänger-Themen 7
J Leerzeichen im Pfad automatisch erkennen Java Basics - Anfänger-Themen 30
D Leerzeichen entfernen Java Basics - Anfänger-Themen 4
P Java Leerzeichen in der Ausgabe entfernen Java Basics - Anfänger-Themen 3
Phillip Leerzeichen nach Zahlen bei Ausgabe Java Basics - Anfänger-Themen 6
I Bei Umlauten und Leerzeichen im Pfad, wird Datei nicht gefunden Java Basics - Anfänger-Themen 5
C Aus einer Textdatei Zahlen lesen mit Leerzeichen Java Basics - Anfänger-Themen 11
P Leerzeichen in Pfad... Java Basics - Anfänger-Themen 17
T Leerzeichen zählen mit Rekursion Java Basics - Anfänger-Themen 17
M nach Typenkonvertierung Leerzeichen ersetzen Java Basics - Anfänger-Themen 2
S Leerzeichen herausfiltern Java Basics - Anfänger-Themen 10
T Zeichen als Leerzeichen weitergegeben Java Basics - Anfänger-Themen 13
D Hilfe beim einlesen eines Strings mit Leerzeichen Java Basics - Anfänger-Themen 16
G Multiple Leerzeichen entfernen Java Basics - Anfänger-Themen 13
C Leerzeichen im char Array setzen Java Basics - Anfänger-Themen 33
C Stringeingabe: kein Satz wegen Leerzeichen möglich Java Basics - Anfänger-Themen 3
D Erste Schritte RandomAccessFile "Leerzeichen" löschen Java Basics - Anfänger-Themen 6
T Erste Schritte Eingelesenen Satz - Wörter und Leerzeichen getrennt in 2x Array's Java Basics - Anfänger-Themen 7
G Leerzeichen einfügen Java Basics - Anfänger-Themen 3
3 Leerzeichen erkennen Java Basics - Anfänger-Themen 3
F Leerzeichen zwischen jeden Buchstaben eines Strings einfügen Java Basics - Anfänger-Themen 16
X nach split leerzeichen weg Java Basics - Anfänger-Themen 4
K Int Array mit "Leerzeichen" füllen Java Basics - Anfänger-Themen 2
D mehrere Leerzeichen durch 1 Leerzeichen ersetzen Java Basics - Anfänger-Themen 3
M property-Datei: key mit Leerzeichen? Java Basics - Anfänger-Themen 3
I Zeichen zählen ohne Leerzeichen Java Basics - Anfänger-Themen 3
A Leerzeichen bei Ausgabe? Java Basics - Anfänger-Themen 3
N java.util.Arrays.sort Warum sind Leerzeichen vor alphabetischen Zeichen sortiert? Java Basics - Anfänger-Themen 12
C mehrere Leerzeichen zwischen Strings Java Basics - Anfänger-Themen 4
P Probleme mit Runtime.exec und Leerzeichen Java Basics - Anfänger-Themen 15
S regular expression - bekomme leerzeichen nicht raus Java Basics - Anfänger-Themen 3
O Leerzeichen aus Java Basics - Anfänger-Themen 11
P Leerzeichen-Problem bei Verzeichnispfad Java Basics - Anfänger-Themen 7
O Leerzeichen im Pfad Java Basics - Anfänger-Themen 8
M wie auf ein feld mit leerzeichen in einem char array prüfen? Java Basics - Anfänger-Themen 4
B Woerter, Zeichen, Leerzeichen zaehlen - Problem Java Basics - Anfänger-Themen 3
F Leerzeichen in Pfadangabe beim Befehl exec() Java Basics - Anfänger-Themen 5
G Split Operation: ein oder mehrere Leerzeichen Java Basics - Anfänger-Themen 7
padde479 Runtime.getRuntime.exec() Leerzeichen unterdrücken Java Basics - Anfänger-Themen 2
M Leerzeichen löschen Java Basics - Anfänger-Themen 2
F Leerzeichen in Integer Array speichern Java Basics - Anfänger-Themen 7
D Abfrage auf Leerzeichen Java Basics - Anfänger-Themen 5
G Im Zeichenarray Leerzeichen invertieren Java Basics - Anfänger-Themen 5
S Problem beim setzen von JAVA_HOME (Leerzeichen?) Java Basics - Anfänger-Themen 7
R Am Begin und Ende eines Strings die Leerzeichen löschen ? Java Basics - Anfänger-Themen 3
M Leerzeichen in Dateinamen ein Problem ? Java Basics - Anfänger-Themen 4
D ausgabe verändern (statt zeilenumbruch leerzeichen) Java Basics - Anfänger-Themen 2
S txt-Datei nach Leerzeichen Splitten lassen! Java Basics - Anfänger-Themen 3
S Leerzeichen replacen Java Basics - Anfänger-Themen 5
F Problem mit Zeichenkette nur aus Leerzeichen Java Basics - Anfänger-Themen 4
L Leerzeichen erfragen Java Basics - Anfänger-Themen 4
L Steuerzeichen für Space (Leerzeichen)? Java Basics - Anfänger-Themen 3
J Dateipfad mit Leerzeichen Java Basics - Anfänger-Themen 10
A replaceAll und Leerzeichen Java Basics - Anfänger-Themen 2
krgewb String mit Datumsangabe in Long umwandeln Java Basics - Anfänger-Themen 2
D String Groß/Kleinschreibung Ignorieren Java Basics - Anfänger-Themen 4
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
Kartoffel_1 String transformation Java Basics - Anfänger-Themen 7
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
K String analysieren Java Basics - Anfänger-Themen 27
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
Beowend String auf Satzzeichen überprüfen? Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
I Sass Compiler und String erhalten? Java Basics - Anfänger-Themen 7
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
N String überprüfen Java Basics - Anfänger-Themen 3
E String zerlegen aus args Java Basics - Anfänger-Themen 1
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben