Character.isLetter (c) devuelve verdadero si el carácter es una letra. ¿Pero hay una manera de encontrar rápidamente si una Cadena solo contiene los caracteres base de ASCII?En Java, ¿es posible verificar si una Cadena es solo ASCII?
Respuesta
Usando Guava, usted podría escribir:
boolean isAscii = CharMatcher.ASCII.matchesAllOf(someString);
De Guayaba 19.0, usted debe utilizar CharMatcher.ascii()
lugar.
Ah, las maravillas de las capas de abstracción :) –
Nice one Colin. –
+1 Aunque es bueno si no necesita otra biblioteca de terceros, la respuesta de Colin es mucho más corta y mucho más legible. Sugerir bibliotecas de terceros está perfectamente bien y no debería castigarse con un voto negativo. – Jesper
Iterate a través de la cadena y usa charAt() para obtener el carácter. Luego trátela como un int, y vea si tiene un valor unicode (un superconjunto de ASCII) que le guste.
Romper en el primero que no te gusta.
Puede hacerlo con java.nio.charset.Charset.
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
*/
}
}
No creo que sea una buena idea hacer el CharsetEncoder estático ya que de acuerdo con los documentos" Las instancias de esta clase no son seguras para el uso simultáneo múltiple trapos." –
@paul_sns, tiene razón CharsetEncoder no es seguro para subprocesos (pero Charset lo es) por lo que no es una buena idea hacerlo estático. – RealHowTo
Con Java 1.7 o superior se puede usar 'StandardCharsets.US_ASCII' en lugar de' Charset.forName ("US-ASCII") '. –
Aquí es otra forma que no depende de una biblioteca, pero utilizando una expresión regular.
Puede utilizar esta sola línea:
text.matches("\\A\\p{ASCII}*\\z")
entero programa de ejemplo:
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"));
}
}
Sería maravilloso si explicas esta expresión regular. –
\\ A - Inicio de la entrada ... \\ p {ASCII} * - Cualquier carácter ASCII en cualquier momento ... \\ z - Fin de la entrada – Arne
iterar a través de la cadena y asegurarse de que todos los personajes tienen un valor inferior a 128.
Java Strings está conceptualmente codificado como UTF-16. En UTF-16, el juego de caracteres ASCII se codifica como los valores 0 - 127 y la codificación para cualquier carácter no ASCII (que puede consistir en más de un carácter Java) garantiza que no incluya los números 0 - 127
Esta debería ser la respuesta principal. Solo verifica si es <128, simple. –
Con Java 1.8 puede hacer: 'str.chars(). AllMatch (c -> c <128)' –
Si desea caracteres imprimibles, puede probar para 'c> = 0x20 && c <0x7F' como la primera 32 valores de la codificación de 7 bits son caracteres de control y el valor final (0x7F) es 'DEL'. –
O copia el código de la clase 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;
}
Esto incluso funciona con 2-char-unicode porque el primer char es> = U + D800 – k3b
probar esto:
for (char c: string.toCharArray()){
if (((int)c)>127){
return false;
}
}
return true;
Era posible. Buen problema.
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);
}
Commons-lang3 de Apache contiene métodos de utilidad/conveniencia valiosos para todo tipo de 'problemas', incluido éste.
System.out.println(StringUtils.isAsciiPrintable("[email protected]£$%^&[email protected]£$%^"));
private static boolean isASCII(String s)
{
for (int i = 0; i < s.length(); i++)
if (s.charAt(i) > 127)
return false;
return true;
}
- 1. ¿Cómo verificar una cadena si es un ASCII o no?
- 2. Rieles: ¿es posible verificar si una cadena es binaria?
- 3. ¿Es posible verificar si una notificación es visible o cancelada?
- 4. Ruby: ¿Cómo verificar si una cadena es una hora válida?
- 5. ¿Es posible obtener solo el primer carácter de una Cadena?
- 6. Verificar si una cadena es JSON en python?
- 7. Función para verificar si una cadena es una fecha
- 8. Verificar si la cadena contiene solo dígitos
- 9. ¿Cuál es una mejor manera de verificar si una cadena es un número entero en iPhone?
- 10. Cómo verificar si una cadena en Java es una URL válida
- 11. ¿Cuál es la mejor manera de verificar si una cadena contiene una URL en Java/Android?
- 12. Cómo verificar si una cadena es de un patrón específico
- 13. Verificar si algo es una lista
- 14. iOS: ¿cómo verificar si una cadena tiene solo dígitos?
- 15. ¿Cómo verificar si una variable es igual a una cadena u otra cadena?
- 16. Compruebe si la cadena es solo un espacio en blanco?
- 17. ¿Es posible ejecutar una cadena en MySQL?
- 18. C# ¿Cómo puedo verificar si una fecha que actualmente es una cadena es hoy?
- 19. ¿Es posible compilar programáticamente código fuente java solo en memoria?
- 20. ¿Es posible verificar si los servicios de localización están activos?
- 21. ¿Es posible que Java String.split pueda devolver una Cadena nula []
- 22. ¿Es posible dividir una cadena en varias líneas en un archivo XML? ¿Si es así, cómo?
- 23. Es posible, en una plantilla de django, verificar si un objeto está contenido en una lista
- 24. IOS: verifique si una cadena es una cadena vacía
- 25. Cómo verificar si el archivo es ASCII o binario en PHP
- 26. Convierte una cadena en una doble, ¿es esto posible?
- 27. forma de Java para comprobar si una cadena es palindrome
- 28. ¿Cómo puedo verificar si existe una cadena en otra cadena?
- 29. ¿Cuál es la mejor manera de verificar si una cadena existe en otra?
- 30. La forma más rápida de verificar si se puede analizar una Cadena en Doblar en Java
Por favor acepte la respuesta de jeremyP ya que es no requiere dependencias, y ningún epically código detallado, e ilumina la propia definición y la historia de caracteres ASCII. – samthebest