Character.isLetter (c) renvoie true si le caractère est une lettre. Mais existe-t-il un moyen de déterminer rapidement si une chaîne ne contient que les caractères de base de l'ASCII?
Réponses
Trop de publicités?Vous pouvez le faire avec 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
*/
}
}
Voici une autre façon de ne pas dépendre d’une bibliothèque mais d’utiliser une expression rationnelle.
Vous pouvez utiliser cette seule ligne:
text.matches("\\A\\p{ASCII}*\\z")
Exemple de programme complet:
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"));
}
}
Parcourez la chaîne et assurez-vous que tous les caractères ont une valeur inférieure à 128.
Les chaînes de caractères Java sont codées conceptuellement au format UTF-16. En UTF-16, le jeu de caractères ASCII est codé sous les valeurs 0 à 127 et le codage de tout caractère non ASCII (pouvant comporter plusieurs caractères Java) est garanti de ne pas inclure les chiffres 0 à 127.
Ou vous copiez le code de la classe 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;
}