11 ответов:
используя гуавы, вы могли бы просто написать:
boolean isAscii = CharMatcher.ASCII.matchesAllOf(someString);начиная с Guava 19.0, вы должны использовать
CharMatcher.ascii().
вы можете сделать это с помощью java.НИО.кодировка.Символов.
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 */ } }
вот еще один способ, не зависящий от библиотеки, но с помощью регулярного выражения.
Вы можете использовать эту одну строку:
text.matches("\A\p{ASCII}*\z")все программы пример:
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")); } }
повторите строку и убедитесь, что все символы имеют значение меньше 128.
строки Java концептуально кодируются как UTF-16. В UTF-16 набор символов ASCII кодируется как значения 0-127, а кодировка для любого символа, отличного от ASCII (который может состоять из более чем одного символа Java), гарантированно не включает числа 0-127
или вы копируете код из IDN класса.
// 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 от Apache содержит ценные утилиты / удобные методы для всех видов "проблем", в том числе этого.
System.out.println(StringUtils.isAsciiPrintable("!@£$%^&!@£$%^"));
попробуйте это:
for (char c: string.toCharArray()){ if (((int)c)>127){ return false; } } return true;
пройтись по строке, и использовать, используя метод charat (), чтобы получить шар. Затем обработайте его как int и посмотрите, имеет ли он значение unicode (надмножество ASCII), которое вам нравится.
перерыв на первый вам не нравится.
private static boolean isASCII(String s) { for (int i = 0; i < s.length(); i++) if (s.charAt(i) > 127) return false; return true; }
//return is uppercase or lowercase public boolean isASCIILetter(char c) { return (c > 64 && c < 91) || (c > 96 && c < 123); }
Это было возможно. Довольно проблемно.
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; } }
Comments