2015-04-08 27 views
5

Qualcuno può suggerirmi come verificare se uno String contiene caratteri a larghezza intera in Java? I personaggi con larghezza completa sono caratteri speciali.come verificare se String ha carattere a larghezza piena in java

caratteri grande ampiezza nella stringa:

abc@gmail.com

caratteri di larghezza e mezzo di stringa:

[email protected]
+0

il metodo contiene lo dirà. iterare su una stringa contenente solo quei "caratteri a larghezza intera" e, per ognuno, eseguire il metodo contiene sulla stringa. – Stultuske

+0

Sì, ho controllato anche io. Ma il codice sembra disordinato, tuttavia nel caso di cui sopra sto controllando la posta elettronica. quindi devo controllare alcuni caratteri aggiuntivi come @,. , _ etc – Kumar

+0

Stai cercando ** all ** full width, o ** any ** full width? cioè quale risultato vuoi quando miscela di pieno e metà? – weston

risposta

2

è possibile confrontare i UNICODE Poiché Unicode per alfabeti (AZ) 97-122, in modo da poter facilmente diffrentiate tra i due

String str="abc@gmail.com"; 
System.out.println((int)str.charAt(0)); 

per ingresso

abc@gmail.com 

uscita

65345 
+1

Grazie per la tua risposta .. Ma in caso di controllo dell'email, la stringa '@' deve essere considerata anche insieme a ".", "_" Ecc.Ci sono dei metodi impliciti che posso verificare. – Kumar

+0

#Neeraj: puoi anche farmi conoscere l'intervallo Unicode per tutti i caratteri a larghezza intera. – Kumar

2

Si può provare qualcosa di simile:

public static final String FULL_WIDTH_CHARS = "AaBbCcDdEeFfGgHhIiJj" 
         + "KkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"; 

public static boolean containsFullWidthChars(String str) { 
    for(int i = 0; i < FULL_WIDTH_CHARS.length(); i++) { 
     if(str.contains(String.valueOf(FULL_WIDTH_CHARS.charAt(i)))) { 
      return true; 
     } 
    } 
    return false; 
} 
0

uso regolare espressione qui. \ W viene utilizzato per verificare la presenza di caratteri non di parole.

str conterrà carattere larghezza se seguente dichiarazione return true:

flag booleano = str.matches ("\\ W");

+0

Poiché sto controllando le email. ho bisogno di controllare se alcuni caratteri speciali sono anche a larghezza intera. – Kumar

2

non sono sicuro se siete alla ricerca di uno o tutti, ecco sono funzioni per entrambi:

public static boolean isAllFullWidth(String str) { 
    for (char c : str.toCharArray()) 
     if ((c & 0xff00) != 0xff00) 
     return false; 
    return true; 
} 

public static boolean areAnyFullWidth(String str) { 
    for (char c : str.toCharArray()) 
     if ((c & 0xff00) == 0xff00) 
     return true; 
    return false; 
} 

Per quanto riguarda la tua metà larghezza '.' e possibili '_'. li striscia fuori prima con una sostituzione forse:

String str="abc@gmail.com"; 

if (isAllFullWidth(str.replaceAll("[._]",""))) 
    //then apart from . and _, they are all full width 

Regex

In alternativa, se si desidera utilizzare una regex per testare, allora questo è l'intervallo di caratteri reale per tutta la larghezza:

[\uFF01-\uFF5E] 

Quindi il metodo è il seguente:

public static boolean isAllFullWidth(String str) { 
    return str.matches("[\\uff01-\\uff5E]*"); 
} 

È possibile aggiungere gli altri caratteri ad esso e quindi non è necessario eliminarli:

public static boolean isValidFullWidthEmail(String str) { 
    return str.matches("[\\uff01-\\uff5E._]*"); 
} 
+0

Grazie per il tuo codice. Ma non dovrei ignorare "." , "_" e uno qualsiasi dei caratteri speciali. Perché possono essere anche in larghezza. Per favore fammi sapere la gamma di Unicode per tutta la larghezza, compresi i caratteri speciali. – Kumar

+1

Bene il tuo esempio non include la versione completa del periodo. E ti ho dato l'intera gamma di personaggi a larghezza intera. – weston

+0

'str.matches (" [\\ uff01 - \\ uff5E] * ")' Dovrebbe farlo. In caso contrario, probabilmente è perché non è tutto a tutta larghezza, come nell'esempio che hai pubblicato. – weston