134 votes

En Java, est-il possible de vérifier si une chaîne n'est que de l'ASCII?

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?

138voto

ColinD Points 48573

En utilisant Guava, vous pouvez simplement écrire:

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

123voto

RealHowTo Points 13117

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
      */
  }
}
 

Détecter les caractères non-ASCII dans une chaîne

82voto

Arne Points 6797

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"));
    }
}
 

61voto

JeremyP Points 46808

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.

17voto

Zarathustra Points 590

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;
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X