Wie lassen sich die Zeichen des 7 bit ASCII Zeichensatzes in einem String erkennen?
Das Beispiel zeigt, wie ein String durchlaufen wird und alle nicht
zum ASCII Zeichensatz gehörigen Zeichen in einer ArrayList
gespeichert und schließlich ausgegeben werden.
Nach dem
unten beschriebenen Befüllen wird die ArrayList durchlaufen und
die einzelnen Einträge werden durch einen Iterator
ausgelesen und schließlich ausgegeben.
Die Erkennung der Nicht-ASCII-Zeichen erfolgt durch die Methode matches()
auf dem String-Objekt, das überprüft werden soll. Sie
nimmt den String eines regulären Ausdrucks als Parameter
entgegen und liefert den boolschen Wert des Funderfolgs. Ist dieser
true
, so wird das entsprechende Zeichen in der
erwähnten ArrayList gespeichert.
Der reguläre Ausdruck
- er wird als String in doppelten Anführungszeichen
übergeben - besteht eigentlich nur aus einem einfachen in
eckige Klammern gefassten Ausdruck zweier Zeichen, die als
hexadezimale Unicode-Zeichen angegeben werden. Die Klammern umfassen
hierbei einen Zeichenbereich, der vom hexadezimalen Zeichen '0' bis
zum hexadezimalen Zeichen '7F' reicht. Beide Zeichen sind durch ein
'-' voneinander getrennt und müssen vierstellig angegeben
werden. Aufgrund ihrer Unicode-Codierung beginnen sie mit einem '\u'
, dessen '\'
jedoch, um selbst nicht als
RegEx-Sonderzeichen erkannt zu werden, mit einem weiteren '\'
maskiert werden muss.
Ausgegangen sind wir jedoch von der
Aufgabe, alle Zeichen zu finden, die nicht zum ASCII
Zeichensatz gehören. Dies erfolgt durch ein '^'
innerhalb der die Zeichenmenge definierenden eckigen Klammern.
Achtung! Die Position ist hier wichtig, da '^' an anderer Stelle
nach dem Zeilenanfang sucht.
Darüber hinaus erkennt Java
auch eine Reihe POSIX-konformer RegEx. Der Ausdruck zur Erkennung
von ASCII-Zeichen lautet hier:
\p{ASCII}
sodass die entsprechende Zeile im Quelltext auch durch
if(!s.matches("\\p{ASCII}")) ausgabe.add(s);
formuliert werden kann.
Die Durchsuchung des Strings geschieht
schließlich, indem er von vorne nach hinten durchlaufen und
Buchstabe für Buchstabe geprüft wird.
import java.util.ArrayList;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ASCIItest {
public static void main(String[] args) {
String eingabe = "Blödelbärchen";
ArrayList<String> ausgabe = new ArrayList<String>();
for(int i=0; i<eingabe.length(); i++){
String s = eingabe.substring(i, i+1);
if(s.matches("[^\\u0000-\\u007F]")) ausgabe.add(s);
}
Iterator<String> iter = ausgabe.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}
}
1) Der ASCII (American Standard Code for Information Interchange) Zeichensatz entspricht den ersten 128 Zeichen (7 bit) des Unicode Zeichensatzes. Er enthält im Wesentlichen die Zeichen des amerikanischen Alphabets und die arabischen Ziffern, sowie einige Satzzeichen und, auf den ersten 33 Stellen, nicht druckbare Steuerzeichen. Die deutschen Umlaute und 'ß' gehören nicht zum ASCII Zeichensatz.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.