2016-07-03 10 views
0

Betrachten Sie eine Zeile wie:Wie erkennt man, ob eine Zeichenfolge andere Sprachen als englische Buchstaben enthält?

[Hello簲 bye 簲 ] 

Diese Linie sowohl chinesische als auch englische Buchstaben hat, die nicht von meinen Interessen ist. Also möchte ich herausfinden, dass, wenn eine Zeichenfolge keine anderen Sprachen als Englisch hat. Irgendeine Idee?

EDIT Ich will es nicht mit regex lösen. Sonst hätte ich es getaggt!

+0

@Idos Bitte beachten Sie meine EDIT. – lonesome

+2

Überprüfen Sie diese Frage http://stackoverflow.com/q/5238491/4517895 –

+0

@MikhailChibel Wie die Antwort des angegebenen Links zu bearbeiten, so dass die Funktion akzeptiert, wenn die Zeichenfolge Ziffern und Sonderzeichen enthält? (like() <>?! etc) – lonesome

Antwort

0

https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html

In der Klasse char, gibt es dies:

getNumericValue (char ch) den int-Wert zurück, dass das angegebene Unicode-Zeichen darstellt.

Ich glaube, Sie können wenig mehr Forschung zu Unicode-Wert von englischen Buchstaben zu tun, so dass Sie überprüfen können, ist der Wert von char in der Reichweite von englischen Zeichen.

+0

Natürlich musst du String in Zeichen zerlegen, aber es könnte einfacher sein, als einzelne Zeichen zu trennen. –

1

Wenn Sie regexp nicht verwenden möchten, können Sie unter

String str = "Hello簲 bye 簲"; 
    boolean isValid = true; 
    for (char c : str.toCharArray()) { 
     if (!(c >= 'a' && c <= 'z') && !(c >= 'A' && c <= 'Z')) { 
      isValid = false; 
      break; 
     } 
    } 
    System.out.println(isValid); 
+0

Wie bearbeite ich diese Antwort, damit die Funktion akzeptiert, wenn die Zeichenfolge Ziffern und Sonderzeichen enthält? (like() <>?! etc) – lonesome

+0

Möchten Sie alle ASCII-Zeichen [0-127] prüfen? – Saravana

+0

ja, so etwas. oh warte, nur bis 127 – lonesome

-1

verwenden Sie können von ASCII Werte aller englischen Zeichen in diesem Programm machen - Ziffern, Groß- und Kleinschreibung Alphabete (Und auch, Leerzeichen müssen überprüft werden).

Die Logik: Durchlaufen jeden Zeichen der Zeichenfolge und prüfen, ob das aktuelle Zeichen ein englische Zeichen ist, das heißt, sein ASCII Wert liegt zwischen 48 und 57 (für die Zahlen 0 bis 9), 65 und 90 (für Großbuchstabenalphabete) oder 97 und 122 (für Kleinbuchstaben) oder ist eine Leerstelle. Wenn es keines von diesen ist, dann ist es ein nicht englischer Charakter.

Hier ist der Code:

String s = <-- THE STRING 
int illegal = 0; //to count no. of non english characters 
for(int i=0; i< s.length(); i++){ 
    int c = (int)s.charAt(i); 
    if(!((c>=48 && c<=57)||(c>=65 && c<=90)||(c>=97 && c<=122)||((char)c == ' '))) 
     illegal++; 
} 
if(illegal > 0) 
System.out.print("String contains non english characters"); 
else 
System.out.print("String does not contain non english characters"); 

HINWEIS: Stellen Sie sicher, dass die Plattform das Programm laufen auf diese Zeichen unterstützt. Die Zeichencodierung für Chinese ist entweder Unicode (Unicode unterstützt fast alle Sprachen der Welt) oder UTF-16. Stellen Sie sicher, dass Sie diese oder sogar die UTF-32 Codierung während der Ausführung des Programms verwenden und dass die Plattform UTF-16/32 unterstützt, wenn nicht Unicode.

testete ich diesen Code auf dem Computer mit den folgenden Testdaten:

String s = "abcdEFGH 745401 妈妈"; 

und ich habe die richtige Ausgabe, wie ich dies auf Unicode lief. Auf Plattformen, die Unicode oder UTF-16/32 nicht unterstützen, behandelt der Compiler die chinesischen Buchstaben 妈妈 als ?????? und es kann einen Fehler in dem Programm verursachen.Die chinesischen Buchstaben, die für das System ?????? werden, werden während der Ausführung einfach ignoriert und daher würde der Ausgang des obigen Eingangs, den ich getestet habe, String does not contain non English characters sein, was falsch ist. Wenn Sie das Programm auf einem Online-Terminal/IDE oder einem Mobiltelefon ausführen, sollten Sie diesen Faktor beachten. Sie müssen sich keine Sorgen machen, wenn Sie es auf einem Windows/Mac-Computer ausführen.

Ich hoffe, dass es Ihnen hilft.