Tam*_*Man 109 java string ascii
如果字符是字母,则Character.isLetter(c)返回调用true.但有没有办法快速查找是否String只包含ASCII的基本字符?
Col*_*inD 120
从Guava 19.0开始,您可以使用:
boolean isAscii = CharMatcher.ascii().matchesAllOf(someString);
Run Code Online (Sandbox Code Playgroud)
这使用的matchesAllOf(someString)方法依赖于工厂方法ascii()而不是现在弃用的ASCII单例.
这里ASCII包括所有ASCII字符,包括低于0x20(空格)的不可打印字符,例如制表符,换行/返回,但也BEL包含代码0x07和DEL代码0x7F.
即使代码点在早期版本的注释中指出,此代码也会错误地使用字符而不是代码点.幸运的是,创建值为U+010000或以上的代码点所需的字符使用两个代理字符,其值超出ASCII范围.因此,即使是包含表情符号的字符串,该方法仍然可以成功测试ASCII.
对于没有这种ascii()方法的早期Guava版本,您可以编写:
boolean isAscii = CharMatcher.ASCII.matchesAllOf(someString);
Run Code Online (Sandbox Code Playgroud)
Rea*_*wTo 98
你可以用java.nio.charset.Charset做到这一点 .
import java.nio.charset.Charset;
public class StringUtils {
public static boolean isPureAscii(String v) {
return Charset.forName("US-ASCII").newEncoder().canEncode(v);
// or "ISO-8859-1" for ISO Latin 1
// or StandardCharsets.US_ASCII with JDK1.7+
}
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
*/
}
}
Run Code Online (Sandbox Code Playgroud)
Arn*_*sch 73
这是另一种不依赖于库而是使用正则表达式的方法.
您可以使用以下单行:
text.matches("\\A\\p{ASCII}*\\z")
Run Code Online (Sandbox Code Playgroud)
整个示例程序:
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"));
}
}
Run Code Online (Sandbox Code Playgroud)
Jer*_*myP 55
遍历字符串并确保所有字符的值小于128.
Java字符串在概念上编码为UTF-16.在UTF-16中,ASCII字符集编码为值0 - 127,并且任何非ASCII字符(可能包含多个Java字符)的编码保证不包含数字0 - 127
Zar*_*tra 14
或者您从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;
}
Run Code Online (Sandbox Code Playgroud)
小智 11
来自Apache的commons-lang3包含了各种"问题"的有价值的实用/便利方法,包括这个问题.
System.out.println(StringUtils.isAsciiPrintable("!@£$%^&!@£$%^"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
84842 次 |
| 最近记录: |