Wie lassen sich die Zeichen des 7 bit ASCII Zeichensatzes in einem String erkennen?

Die Zeichen des ASCII Zeichensatzs1) - und somit auch Zeichen, die nicht zu dieser Menge gehören - lassen sich durch einen regulären Ausdruck auslesen.

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.