publicstaticStringremoveNonLetters(String sentence){String removeNonLetters ="";for(int i =0; i < sentence.length(); i++){char character = sentence.charAt(i);if((character >='a'&& character <='z'|| character >='A'&& character <='Z')){
removeNonLetters = removeNonLetters + character;}}return removeNonLetters.replaceAll("\s","");}
Guten Tag. Ich habe eine Frage bezüglich Umlauten in Java. Die folgende Methode ist dazu gedacht, alle chars, die keine Buchstaben sind, aus einem String zu entfernen. Das klappt auch soweit ganz gut, nur habe ich durch Testfälle nun festgestellt, dass die Umlaute "äöü" in java keine Buchstaben sondern Zeichen sind, wodurch diese natürlich ungewollter Weise auch aus dem String entfernt werden. wie kann ich eine Ausnahme in meinen Code implementieren, sodass die Umlaute nicht entfernt werden?
Schau Dir mal die Methode Character.isLetter() an. Alternativ kannst Du selbstverständlich einfach prüfen, ob das Zeichen ein Umlaut ist (z. B. character == 'ö' bzw. character == '\u00f6', um im Quelltext keine Umlaute zu haben). Außerdem wäre auch ein regulärer Ausdruck möglich, dann verkürzt sich die Methode auf ein Minimum, der Rumpf der Methode besteht dann z. B. nur noch aus
Die ganzen Umlaute stehen doch in der Unicode Tabelle komplett woanders, deswegen funktioniert das nicht. Du betrachtest den Wertebereich innerhalb von a bis z und A bis Z. Und innerhalb dieser Bereiche existieren keine deutschen Umlaute.
Wie immer: Man erkennt Tobias, fragt sich: Soll ich ihn direkt bannen? Und immer wieder denke ich mir: "Noch hatte er ja nicht seinen Moment - evtl. ist er ja jetzt erwachsen geworden". So langsam sollte ich es doch gelernt haben, dass dieses "An das Gute in Tobias glauben" schlichtweg falsch ist ...
Der Einwand von @WhosTobias@WhosWhat war doch nicht ganz unberechtigt: In Versalien oder Kapitälchen gesetzter Text könnte durchaus das große Eszett (ẞ) enthalten. Mag jetzt für den OP weniger relevant sein und die Transferleistung kann man dann schon voraussetzen, das Zeichen in den regulären Ausdruck aufzunehmen, aber den Hinweis als solches finde ich nicht schlecht: das ist etwas, was man normalerweise nicht auf dem Schirm hat.
Interessant in diesem Zusammenhang:
https://de.wikipedia.org/wiki/Gro%C3%9Fes_%C3%9F hat gesagt.:
Am 29. Juni 2017 wurde das Eszett als Versal-Variante (ẞ) der Rechtschreibung hinzugefügt, sodass es heute offiziell verwendet werden darf,[6] wobei „SS“ der Regelfall blieb. Dieses Verhältnis wurde 2024 umgedreht: „ẞ“ ist nun der Regelfall, „SS“ die Ausnahme.[7]
Das heißt für mich:
a) dass wir es künftig öfter mit dem großen Eszett zu tun bekommen könnten
b) dass eigentlich die Regeln in Java angepasst werden müssten. Character.toUpperCase('ß') müsste z. B. das große Eszett liefern und bei regulären Ausdrücken müsste ein "(?i)ß" auch das große Eszett matchen. (Nachtrag: hier muss ich mal die aktuelle Version testen ist immer noch "falsch")
Auch wusste ich nicht, dass man in Windows das große Eszett seit Windows 8 mittels Shift + AltGr + ß eintippen kann.
Die Thematik ist ja noch bescheuerter als gedacht 🤣
https://community.snowflake.com/s/article/why-latin-small-sharp-s-upper-case-to-SS hat gesagt.:
From Unicode 5.1.0, there has been a change in the handling of the Latin character sharp S. The upper of LATIN SMALL LETTER SHARP S now corresponds to 'SS'. This is due to the usage of capital ß in German. German orthography uses the string "SS" as uppercase mapping for small sharp s. Thus, with the default Unicode casing operations, capital sharp s will lowercase to small sharp s, but not the reverse: small sharp s uppercases to "SS".
Aber wirklich. Da macht sich vermutlich kein Mensch Gedanken, was so eine kleine Änderung nach sich zieht.
Ich dachte zuerst auch: okay, das muss in Java angepasst werden... Dann: Moment, das ist doch ein allgemeines Thema, kann ja nicht sein, dass das einer so und der andere so macht. Okay, der Spaß ist in Unicode spezifiziert. Und jetzt geht's los: alles, was mit Unicode zu tun hat, muss entsprechend aktualisiert bzw. berücksichtigt werden. Und was hat das für Auswirkungen? Beispiel: Java an DB... lol.
Vermutlich wird das keine größere Folgen nach sich ziehen, aber ich möchte nicht wissen, in wie vielen Fällen das zumindest zu kleineren Problemen führt. Oder wenn ich an Statistiken denke, die vollautomatisch erzeugt werden. Ob das dann immer alles korrekt behandelt wird...
Doch klar . Der IT Planungsrat hat eine entsprechende DIN vorbereitet welche Zeichen zwingend von Systemen der öffentlichen Verwaltung verarbeitet werden sollen. Das ist das große ß mit dabei.
Viele der Daten auf einem Personalausweis wurden in Großbuchstaben angegeben. Dabei auch das ß. Kommt in dem Bereich oft vor.
Aber: Hier in dem Thread nicht von Belang. Es gibt noch hundert andere Zeichen wie 🥸😏 oder ë oder ę , die man im europäischen Raum auch verarbeiten können muss.
Wie dem auch sei: Der User hat Umlaute auf „öäü“ eingeschränkt. Daher ist weder der Hinweis von dem Troll Tobi dahingehend notwendig noch berechtigt.
Ja, aber das ist kein Grund für Entgleisungen. Wenn er da eine "akademische Diskussion" geführt hätte über das Thema, dann wäre es ja ok. Aber das ist halt einfach so nicht sinnvoll ...
Und dann über irgendwelche VPN Server einen neuen Account zu erstellen um noch ein Post zu machen ... Sorry, aber wenn man mich irgendwo nicht will, dann würde ich da nicht ständig neue Accounts erstellen ...
Sicher, das ist aber auch nicht das Problem. Es geht ja um die Änderungen: heute machen wir alles ohne großes Eszett, das ersetzen wir durch SS. Dann führen wir optional ein großes Eszett ein. D. h. ein kleines Eszett wird nach wie vor zu einem SS, ein großes Eszett wird dafür zu einem kleinen Eszett. Und jetzt gehen wir her und ändern die Prioritäten: großes Eszett "Pflicht", SS optional. Dass irgendwer mit den Daten dann noch vernünftig arbeiten können soll: 🤷♂️