Character.isLetter (c) restituisce true se il carattere è una lettera. Ma c'è un modo per trovare rapidamente se una stringa contiene solo i caratteri di base di ASCII?In Java, è possibile verificare se una stringa è solo ASCII?
risposta
Utilizzando Guava, si può solo scrivere:
boolean isAscii = CharMatcher.ASCII.matchesAllOf(someString);
Da Guava 19,0 in poi, si dovrebbe usare CharMatcher.ascii()
invece.
Ah, le meraviglie dei livelli di astrazione :) –
Nice one Colin. –
+1 Anche se va bene se non hai bisogno di un'altra libreria di terze parti, la risposta di Colin è molto più breve e molto più leggibile. Suggerire librerie di terze parti è perfettamente OK e non dovrebbe essere punito con un voto negativo. – Jesper
Iterate attraverso la stringa e utilizzate charAt() per ottenere il carattere. Quindi trattalo come un int, e vedi se ha un valore unicode (un superset di ASCII) che ti piace.
Pausa al primo che non ti piace.
È possibile farlo 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
*/
}
}
Non credo che sia una buona idea per fare il CharsetEncoder statica poiché, secondo la documentazione "istanze di questa classe non sono sicuri per l'uso da parte multipla concomitante fili ". –
@paul_sns, si sono CharsetEncoder diritto non è thread-safe (ma charset è) quindi non è una buona idea per renderlo statico. – RealHowTo
con Java 1.7 o superiore si può usare 'StandardCharsets.US_ASCII' invece di' Charset.forName ("US-ASCII") '. –
Ecco un altro modo, non a seconda di una biblioteca, ma utilizzando un'espressione regolare.
È possibile utilizzare questa singola riga:
text.matches("\\A\\p{ASCII}*\\z")
programma di esempio totale:
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"));
}
}
Sarebbe meraviglioso se spiegassi questa espressione regolare. –
\\ A - Inizio di ingresso ... \\ p {ASCII} * - Qualsiasi carattere ASCII eventuali tempi ... \\ z - Fine di ingresso – Arne
Itera attraverso la stringa e assicurarsi che tutti i personaggi hanno un valore inferiore a 128.
Le stringhe Java sono concettualmente codificate come UTF-16. In UTF-16, il set di caratteri ASCII è codificato come i valori 0 - 127 e la codifica per qualsiasi carattere non ASCII (che può consistere di più di un carattere Java) è garantita per non includere i numeri 0 - 127
Questo dovrebbe essere la risposta superiore. Controlla se è <128, semplice. –
con Java 1.8 si può fare: 'str.chars() allmatch (c -> c <128)' –
Se si desidera che i caratteri stampabili si consiglia di verificare 'c> = 0x20 && c <0x7F' come il primo. 32 valori della codifica a 7 bit sono caratteri di controllo e il valore finale (0x7F) è 'DEL'. –
O si copia il codice dalla 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;
}
Questo funziona anche con 2-char-unicode, perché il 1 °-char è> = U + D800 – k3b
provare questo:
for (char c: string.toCharArray()){
if (((int)c)>127){
return false;
}
}
return true;
Era possibile. Bel 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 da Apache contiene metodi di utilità/convenienza di valore per tutti i tipi di 'problemi', compreso questo.
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. Come verificare una stringa se è un ASCII o no?
- 2. Rails: possibile verificare se una stringa è binaria?
- 3. Come verificare se una stringa è bilanciata?
- 4. Come verificare se una stringa è vuota in Elixir
- 5. Verificare se ResultSet è vuoto in Java
- 6. Come verificare se una stringa è nullo in python
- 7. Come verificare se un tipo è una stringa in C#?
- 8. Verificare se una stringa è JSON in python?
- 9. Verificare se un valore è una stringa in Coldfusion
- 10. Verificare se una stringa contiene solo un URL in PHP
- 11. Funzione per verificare se una stringa è una data
- 12. SQL Server - verificare se cast è possibile
- 13. Ruby: come verificare se una stringa è valida?
- 14. Verifica se una stringa python è stampabile
- 15. Modo rubino per verificare se una stringa non è vuota?
- 16. Come posso verificare se una stringa è un float?
- 17. Come verificare se una stringa è uno dei valori noti?
- 18. Come verificare se una stringa è di uno schema specifico
- 19. Come verificare se una stringa è un URL HTTP valido?
- 20. Verificare se stringa è il numero in Android
- 21. iOS: come verificare se una stringa ha solo cifre?
- 22. Come posso verificare se una stringa contiene solo lettere?
- 23. Come verificare se l'oggetto JSON è vuoto in Java?
- 24. Qual è il modo migliore per verificare se una stringa contiene un URL in Java/Android?
- 25. Come verificare se una stringa in Java è un URL valido
- 26. Come verificare se una variabile è uguale a una stringa o un'altra stringa?
- 27. Verificare se l'argomento è passato a una funzione Java Script
- 28. Converti una stringa in doppia: è possibile?
- 29. È possibile eseguire una stringa in MySQL?
- 30. Come verificare se la connessione Internet è presente in java?
Si prega di accettare la risposta di jeremyp come è non richiede dipendenze, e non epicamente codice verbose, e illumina la definizione e la storia di caratteri ASCII. – samthebest