Ist es in Java möglich zu überprüfen, ob ein String nur ASCII ist?

Character.isLetter (c) gibt true zurück, wenn das Zeichen ein Buchstabe ist. Aber gibt es eine Möglichkeit, schnell zu finden, ob ein String nur die Basiszeichen von ASCII enthält?

Mit Guava könnte man einfach schreiben:

boolean isAscii = CharMatcher.ASCII.matchesAllOf(someString); 

Ab Guava 19.0 sollten CharMatcher.ascii() stattdessen CharMatcher.ascii() verwenden.

Sie können es mit java.nio.charset.Charset tun.

 import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; public class StringUtils { static CharsetEncoder asciiEncoder = Charset.forName("US-ASCII").newEncoder(); // or "ISO-8859-1" for ISO Latin 1 public static boolean isPureAscii(String v) { return asciiEncoder.canEncode(v); } public static void main (String args[]) throws Exception { String test = "Réal"; System.out.println(test + " isPureAscii() : " + StringUtils.isPureAscii(test)); test = "Real"; System.out.println(test + " isPureAscii() : " + StringUtils.isPureAscii(test)); /* * output : * Réal isPureAscii() : false * Real isPureAscii() : true */ } } 

Erkennt Nicht-ASCII-Zeichen in einem String

Hier ist ein anderer Weg, der nicht von einer Bibliothek abhängt, sondern von einem Regex.

Sie können diese einzelne Zeile verwenden:

 text.matches("\\A\\p{ASCII}*\\z") 

Ganzes Beispielprogramm:

 public class Main { public static void main(String[] args) { char nonAscii = 0x00FF; String asciiText = "Hello"; String nonAsciiText = "Buy: " + nonAscii; System.out.println(asciiText.matches("\\A\\p{ASCII}*\\z")); System.out.println(nonAsciiText.matches("\\A\\p{ASCII}*\\z")); } } 

Iterieren Sie durch die Zeichenfolge und stellen Sie sicher, dass alle Zeichen einen Wert kleiner als 128 haben.

Java-Zeichenfolgen werden konzeptionell als UTF-16 codiert. In UTF-16 wird der ASCII-Zeichensatz mit den Werten 0 – 127 kodiert, und die Codierung für alle Nicht-ASCII-Zeichen (die aus mehr als einem Java-Zeichen bestehen können) wird garantiert nicht die Zahlen 0 – 127 enthalten

Oder Sie kopieren den Code aus der IDN- class.

 // to check if a string only contains US-ASCII code point // private static boolean isAllASCII(String input) { boolean isASCII = true; for (int i = 0; i < input.length(); i++) { int c = input.charAt(i); if (c > 0x7F) { isASCII = false; break; } } return isASCII; } 

commons-lang3 von Apache enthält wertvolle Hilfs- / Komfort-Methoden für alle Arten von “Problemen”, einschließlich dieser.

 System.out.println(StringUtils.isAsciiPrintable("!@£$%^&!@£$%^")); 

Versuche dies:

 for (char c: string.toCharArray()){ if (((int)c)>127){ return false; } } return true; 

Iteriere durch die Zeichenfolge und benutze charAt (), um das Zeichen zu erhalten. Behandle es dann als int und sieh nach, ob es einen Unicode-Wert (eine Obermenge von ASCII) hat, den du magst.

Brechen Sie beim ersten Mal, dass Sie nicht mögen.

 private static boolean isASCII(String s) { for (int i = 0; i < s.length(); i++) if (s.charAt(i) > 127) return false; return true; } 

Es war möglich. Hübsches Problem.

 import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; public class EncodingTest { static CharsetEncoder asciiEncoder = Charset.forName("US-ASCII") .newEncoder(); public static void main(String[] args) { String testStr = "¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~KITEC 3/F Rotunda 2"; String[] strArr = testStr.split("~~", 2); int count = 0; boolean encodeFlag = false; do { encodeFlag = asciiEncoderTest(strArr[count]); System.out.println(encodeFlag); count++; } while (count < strArr.length); } public static boolean asciiEncoderTest(String test) { boolean encodeFlag = false; try { encodeFlag = asciiEncoder.canEncode(new String(test .getBytes("ISO8859_1"), "BIG5")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return encodeFlag; } } 
 //return is uppercase or lowercase public boolean isASCIILetter(char c) { return (c > 64 && c < 91) || (c > 96 && c < 123); }