Sonderzeichen in einem String erkennen

speedle

Mitglied
Hallo,

ich bin leider Anfänger in Java und komme bei diesem Problem einfach nicht weiter:
Ich soll einen String auf Sonderzeichen (also alle Zahlen + Zeichen wie ", §, $, %, &, / usw.) überprüfen. Dies alles wird dann in eine boolean Methode verpackt und entweder ein true oder halt false zurückgegeben.

Mein Ansatz:
Java:
public static boolean containsOnlyLetters(String s) {
             for (int j = 0; j < s.length(); j++)
	if (Character.isDigit(s.charAt(j)))
	return false;
	return true;	
	}

Aber wie man unschwer erkennen kann, werden damit nur Zahlen abgefangen, aber halt leider keine Sonderzeichen.

Ich hoffe, dass mir jemand Hilfe geben kann!

Besten Dank schon mal!

Gruß
 

faetzminator

Gesperrter Benutzer
Machs doch mit Regex. Alle nötigen Infos findest du hier: Pattern (Java 2 Platform SE v1.4.2). Willst du z.B. prüfen, ob in einem String nur a-z, A-Z, 0-9 und _ vorkommen, hast du [c]\w[/c] zur Verfügung:
Java:
public static boolean containsOnlyLetters(String s) {
    return s.matches("\\w*");
}
für a-d würdest du [c]"[a-d]*"[/c] verwenden etc.
 

speedle

Mitglied
Hy,


für meine Zwecke sollte ich \W A non-word character: [^\w] verwenden, oder?
Also:
Java:
public static boolean containsOnlyLetters(String s) {
    return s.matches("\\W");
}

Aber leider funktioniert das nicht wirklich, weil er dann auch bei Wörtern ohne Sonderzeichen ne Fehlermeldung schmeisst!?

Gruß
 

faetzminator

Gesperrter Benutzer
du willst [c]true[/c], wenn nur Buchstaben vorkommen, also [c]true[/c] von dem Regex. Dann willst du ganz bestimmt nicht [c]"\\W*"[/c] sondern [c]"\\w*"[/c]. Ein [c]\w[/c] steht dafür für ein Vorkommnis eines Buchstaben, der [c]*[/c] dahinter für 0 bis unendliche Vorkomnisse - das was du willst! Aber wie gesagt, der [c]\w[/c] matcht auf [c][a-zA-Z0-9_][/c], also auch auf 0-9 und _. Diese müsstest du ansonsten explizit ausklammern.
 

faetzminator

Gesperrter Benutzer
Ja, du verwendest einfach [c]"[\\w\\D]*"[/c], aber \w ist sowieso in \D drin. Du würdest wohl so was wollen: [c]"[\\w&&[^\\d]]*"[/c], also a-z, A-Z und _. Mit Regex könnte man noch viel mehr ;)
 

speedle

Mitglied
Hy,

also der _ darf auch net enthalten sein!
Regex ist wirklich sehr mächtig, erfordert aber leider auch ne mächtige Einarbeitungszeit.
 

speedle

Mitglied
Das ganze soll für ne Uni Arbeit gemacht werden. Bin mir gar net sicher, ob die Regex akzeptieren, da wir es noch nicht behandelt haben.
Hat einer irgend ne Idee, das mit ner for Schleife oder wie auch immer zu lösen ohne den Einsatz von regex?
 

crackm

Mitglied
Regex sind reguläre Ausdrücke und eigentlich auch das Thema der Theoretische Infromatik 1 d.h. denke ich schon, dass es ok wäre diese zu benutzen ;) .
Und ja man kann es auch anderes lösen:
da du String als Parameter übergibst kannst du denn in einen char-array aufspalten. Dafür bestimmst du zunächst die Länge des Strings und erzeugst einen entsprechenden char-array(siehe charAt). Da Zeichen eine Entsprächung in einer ASCII Tabelle haben, haben die auch so ein Art id. Die Großbuchstaben befinden sich dabei zwischen 65 und 89 und Kleinbuchstaben 97 und 122.
Wenn du diesen array duchgehts und ein Zeichen mit id z.b. 95 vorkommt kannst du die Schleife abbrechen und false zurückgeben.

Edit: Kann man auch ohne array :)
 
Zuletzt bearbeitet:

speedle

Mitglied
Wie gesagt, da ich Anfänger bin bin ich um jeden Ratschlag dankbar.
Leider funktioniert das mit regex und den o.g. Ausdrücken nich nicht wirklich. Entweder habe ich es falsch implementiert oder aber geben die Ausdrücke noch nicht ganz Sinn?
Arrays haben wir atm noch nen behandelt ... ich weiss aber einfach nicht, wie mans ohne regex einigermassen effizient programmieren könnte!?

Gruß
 

eRaaaa

Top Contributor
Ne doofe Frage am Rande : wieso benutzt du anstelle von Character.isDigit() nicht isLetter() ? (bzw was ist mit ä,ü,ö,ß ? Zählen die etwa als Sonderzeichen? )
 
Zuletzt bearbeitet:

speedle

Mitglied
Ganz einfach: Weil damit auch nicht alles abgefangen wird!
Es sollen Namen (Vornamen) eingelesen werden, sodass ä, ö etc. nicht wirklich sinn voll sind.
 

crackm

Mitglied
Mal ein Tipp am Rande ich habe da oben was hingeschrieben ^^
Java:
public static boolean containsOnlyLetters_2(String s) {
       for (int j = 0; j < s.length(); j++){
          if (!(((int)s.charAt(j)>=65 && (int)s.charAt(j)<=89) || ((int)s.charAt(j)>=97 && (int)s.charAt(j)<=122)) )
          {
            return false;
          }
       }
       return true;

    }
 

eRaaaa

Top Contributor
Ganz einfach: Weil damit auch nicht alles abgefangen wird!
Es sollen Namen (Vornamen) eingelesen werden, sodass ä, ö etc. nicht wirklich sinn voll sind.

Okay, das hattest du noch nicht erwähnt, daher meine Frage. Was sinnvoll ist und was nicht, entscheidest natürlich du oder der Aufgabensteller anhand des Problems, aber an sich gibts natürlich ü,ö oder ähnliches in Vornamen (Jürgen,Jörg, ...usw)
Aber okay,wenn ichs dann jetzt richtig verstanden habe, ist es dann wohl mit Regex ein einfaches
Java:
    public static boolean containsOnlyLetters_3(String s) {
	return s.matches("[a-zA-Z]+");
    }

(obwohl du das ja anscheinend auch nicht willst...^^)
 

speedle

Mitglied
Mal ein Tipp am Rande ich habe da oben was hingeschrieben ^^
Java:
public static boolean containsOnlyLetters_2(String s) {
       for (int j = 0; j < s.length(); j++){
          if (!(((int)s.charAt(j)>=65 && (int)s.charAt(j)<=89) || ((int)s.charAt(j)>=97 && (int)s.charAt(j)<=122)) )
          {
            return false;
          }
       }
       return true;

    }

Besten Dank! Funktioniert astrein!



Okay, das hattest du noch nicht erwähnt, daher meine Frage. Was sinnvoll ist und was nicht, entscheidest natürlich du oder der Aufgabensteller anhand des Problems, aber an sich gibts natürlich ü,ö oder ähnliches in Vornamen (Jürgen,Jörg, ...usw)
Aber okay,wenn ichs dann jetzt richtig verstanden habe, ist es dann wohl mit Regex ein einfaches
Java:
    public static boolean containsOnlyLetters_3(String s) {
	return s.matches("[a-zA-Z]+");
    }

(obwohl du das ja anscheinend auch nicht willst...^^)

Danke! Sehr elegant die Lösung. Ich wollte vorher immer mit den vordefinierten Ausdrücken arbeiten, aber in diesem Fall ist eine manuelle wesentlich sinnvoller.


Besten Dank für eure Mühen!

Ich werde euch demnächt sicherlich noch öfter was fragen müssen! ;):oops:
 

eRaaaa

Top Contributor
Wollte nur noch schnell anmerken (dann halt ich auch endlich den Mund/Tastatur) dass es bei
Java:
if (!(((int)s.charAt(j)>=65 && (int)s.charAt(j)<=89)
<= 90 heißen muss, sonst akzeptierst du das große Z nicht und der arme Zlatko darf nicht mitspielen ;>

(Man könnte das sichelrich auch noch ein wenig abkürzen ^^)
 

speedle

Mitglied
Und mit Jörg, Jürgen (auch wenn es doofe Namen sind, sollten sie berücksichtigt werden) hast Du Recht. Aber diese Laute sind im ASCII gar net enthalten oder?
 

speedle

Mitglied
Wollte nur noch schnell anmerken (dann halt ich auch endlich den Mund/Tastatur) dass es bei
Java:
if (!(((int)s.charAt(j)>=65 && (int)s.charAt(j)<=89)
<= 90 heißen muss, sonst akzeptierst du das große Z nicht und der arme Zlatko darf nicht mitspielen ;>

Da bin ich sogar ausnahmsweise vorhin selber draufgekommen ^^
Aber hättest du auch ne Lösung mit ö, ä, etc. Mir sind vorher Namen wie Jörg, Jürgen gar net eingefallen :D
 

eRaaaa

Top Contributor
Und mit Jörg, Jürgen (auch wenn es doofe Namen sind, sollten sie berücksichtigt werden) hast Du Recht. Aber diese Laute sind im ASCII gar net enthalten oder?

Java:
	System.out.println((char)228 +" "+(char)196); //ä Ä
	System.out.println((char)246 +" "+(char)214); //ö Ö
	System.out.println((char)252 +" "+(char)220); //ü Ü
 

speedle

Mitglied
So, abschliessend noch die eleganteste Lösung mit Regex:
Java:
return s.matches("[a-zA-ZäöüÄÖÜß]+");
 

speedle

Mitglied
und gleich nochmal was von mir:

Java:
public static boolean containsOnlyLetters(String s) {
			for (int j = 0; j < s.length(); j++)
			if (Character.isLetter(s.charAt(j)) == false)
		return false;
		return true;
}

Funktioniert auch astrein, mit Umlauten und Sonderzeichen :D

Verdammt, weviel Zeit mich diese Methode gekostet hat.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
Z Sonderzeichen in einem String gezeichnen/bearbeiten Java Basics - Anfänger-Themen 6
Juelin Sonderzeichen wie Euro (€) Java Basics - Anfänger-Themen 4
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
O Regex bei ReplaceAll ersetzt Wort und Sonderzeichen nicht. Java Basics - Anfänger-Themen 9
K Sonderzeichen einlesen Java Basics - Anfänger-Themen 3
C Wie erkennt man Sonderzeichen im String? Java Basics - Anfänger-Themen 26
J ireport Designer / CSV / Sonderzeichen was läuft falsch Java Basics - Anfänger-Themen 7
W Methoden Konvertierung von Sonderzeichen Java Basics - Anfänger-Themen 2
S Sonderzeichen '|' (u007C) mit Scanner einlesen Java Basics - Anfänger-Themen 1
T byte[] zu String mit Sonderzeichen Java Basics - Anfänger-Themen 2
J Datentypen Cast von int zu char führ zu 'Sonderzeichen' Java Basics - Anfänger-Themen 2
B Char-Vergleich Sonderzeichen Java Basics - Anfänger-Themen 6
X String Sonderzeichen/Zahlen erkennen Java Basics - Anfänger-Themen 3
E String soll mit Großbuchstaben anfangen und keine Sonderzeichen enthalten Java Basics - Anfänger-Themen 4
M Sonderzeichen werden nicht erkannt Java Basics - Anfänger-Themen 3
A Datentypen Sonderzeichen / Strings ersetzen Java Basics - Anfänger-Themen 3
K Sonderzeichen auf der Windowskonsole ausgeben Java Basics - Anfänger-Themen 8
turmaline Ein regulärer Ausdruck für HTML-Sonderzeichen Java Basics - Anfänger-Themen 3
F Sonderzeichen bei XML Serialisierung nicht konvertieren Java Basics - Anfänger-Themen 7
S String auf Sonderzeichen untersuchen Java Basics - Anfänger-Themen 6
V Sonderzeichen als eigene "Operatoren" im JTextField Java Basics - Anfänger-Themen 4
M Sonderzeichen beim usedelimiter Java Basics - Anfänger-Themen 4
S Sonderzeichen "§" wird nicht erkannt - Stichwort Encoding! Java Basics - Anfänger-Themen 13
Benji0815 Sonderzeichen Java Basics - Anfänger-Themen 8
M Sonderzeichen in einer Datei auslesen Java Basics - Anfänger-Themen 3
T JOption Pane: Sonderzeichen verbieten? Java Basics - Anfänger-Themen 14
G String und Sonderzeichen Java Basics - Anfänger-Themen 6
T Sonderzeichen in label Java Basics - Anfänger-Themen 4
B Exception bei ImageIO wegen sonderzeichen Java Basics - Anfänger-Themen 11
Semox Umwandlung von Sonderzeichen in HTML-Datei mit Ausgabe Java Basics - Anfänger-Themen 7
D Sonderzeichen ä,ü,ö werden als ? ausgegeben Java Basics - Anfänger-Themen 3
T Sonderzeichen Java Basics - Anfänger-Themen 2
G Sonderzeichen automatisch ändern lassen Java Basics - Anfänger-Themen 23
A XML-Datei erzeugen+Sonderzeichen erlauben Java Basics - Anfänger-Themen 10
L Sonderzeichen automatisch escapen. Java Basics - Anfänger-Themen 7
U Sonderzeichen die zweite Java Basics - Anfänger-Themen 16
H GPS über ser. Schnittst. liefert teilweise Sonderzeichen Java Basics - Anfänger-Themen 3
M RandomAccessFile schreibt Sonderzeichen vor String Java Basics - Anfänger-Themen 2
B String mit Sonderzeichen wie " oder = überprüfen Java Basics - Anfänger-Themen 2
H Datei mit Sonderzeichen Java Basics - Anfänger-Themen 8
G Newline Sonderzeichen aus File entfernen u als String speic? Java Basics - Anfänger-Themen 3
T Robot-Problem mit Sonderzeichen Java Basics - Anfänger-Themen 2
M java sonderzeichen filtern Java Basics - Anfänger-Themen 3
M Konvertierung v. Strings (evtl. mit Sonderzeichen) nach HTML Java Basics - Anfänger-Themen 8
M Char Array mit Sonderzeichen in String umwandeln Java Basics - Anfänger-Themen 21
S Umlaute und Sonderzeichen erkennen Java Basics - Anfänger-Themen 12
S HTML Sonderzeichen in Unicode wandeln Java Basics - Anfänger-Themen 5
C Sonderzeichen (ä, ö, ü) in JTextArea Java Basics - Anfänger-Themen 9
J Sonderzeichen Java Basics - Anfänger-Themen 2
K Mehrere Werte in einem Switch Case parallel überprüfen Java Basics - Anfänger-Themen 23
Zrebna Fragen zu einem Klassendiagramm Java Basics - Anfänger-Themen 8
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
F 2x 16bit Werte zu einem 32bit und dann splitten mit 0xb Java Basics - Anfänger-Themen 1
J JSON mit einem JPanel Java Basics - Anfänger-Themen 3
F Einem GIT repository ein Projekt hinzufügen Java Basics - Anfänger-Themen 1
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
J Auf einem JLabel Linien Malen Java Basics - Anfänger-Themen 1
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
XWing Randomizer mit einem String Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
Kumora ArrayIndexOutOfBoundsException bei einem Sortierverfahren Java Basics - Anfänger-Themen 2
I Viereck / Rechteck Prüfung innerhalb einem bestimmten Bereich Java Basics - Anfänger-Themen 2
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
Substring in einem String finden Java Basics - Anfänger-Themen 13
J Fehlerbehandlung an einem Beispiel Java Basics - Anfänger-Themen 8
I ResultSet aus meiner SQL-Abfrage in einem JTextfield ausgeben. Java Basics - Anfänger-Themen 1
I Innerhalb einem Bild ein Teil austauschen Java Basics - Anfänger-Themen 26
I Dateigröße von einem InputStream oder byte[] bekommen Java Basics - Anfänger-Themen 2
H Compiler-Fehler Klasse in einem Package wird nicht gefunden bzw. akzeptiert Java Basics - Anfänger-Themen 12
S Algorithmus entwicklen, der zu einem gegebenen Datum die Jahreszeit ermittelt Java Basics - Anfänger-Themen 13
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
A Elemente in einem Array Java Basics - Anfänger-Themen 5
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
berserkerdq2 Wie gebe ich den Pfad zu einer Datei an, die in einem Ordner in Eclipse ist? Java Basics - Anfänger-Themen 1
M Objekt in einem Objekt speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
L Gridmuster in einem Array Java Basics - Anfänger-Themen 2
D spezifische Knoten in einem Baum zählen Java Basics - Anfänger-Themen 9
X Erste Schritte Hilfe bei einem kleinen Spiel. Java Basics - Anfänger-Themen 19
O Array mit einem Zeichen vergleichen Java Basics - Anfänger-Themen 1
B Brauche Hilfe zu einem Code Java Basics - Anfänger-Themen 5
J Zahlen bis zu einem bestimmten Grenzwert ausgeben Java Basics - Anfänger-Themen 11
P9cman Vokale in einem String überprüfen mittels Rekursion Java Basics - Anfänger-Themen 8
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
Igig1 Wie lasse ich dir Werte in einem Array zusammenrücken? Java Basics - Anfänger-Themen 4
W Methode, die mit einem Datum arbeitet? Java Basics - Anfänger-Themen 22

Ähnliche Java Themen

Neue Themen


Oben