2015-04-08 18 views
5

Czy ktoś może zaproponować mi, aby sprawdzić, czy String zawiera znaki o pełnej szerokości w Java? Znaki o pełnej szerokości są znakami specjalnymi.Jak sprawdzić, czy ciąg ma znak o pełnej szerokości w java

Pełne znaków Szerokość w String:

abc@gmail.com

znaków szerokość połowę w String:

[email protected]
+0

metoda zawiera powie ci to. iteruj po łańcuchu zawierającym tylko te znaki "pełnej szerokości", a dla każdego uruchom metodę zawiera w swoim łańcuchu. – Stultuske

+0

Tak, też sprawdziłem. Ale kod wygląda na brudny, jednak w powyższym przypadku sprawdzam pocztę. więc muszę sprawdzić kilka dodatkowych znaków, takich jak @,. , _ itp. – Kumar

+0

Szukasz ** całej ** pełnej szerokości lub ** dowolnej ** pełnej szerokości? tj. jaki rezultat chcesz, gdy mieszanka pełnego i pół? – weston

Odpowiedz

2

można porównać UNICODE Od Unicode dla alfabetów (AZ) 97-122, dzięki czemu można łatwo diffrentiate między tymi dwoma wejściami:

abc@gmail.com 

Wyjście

65345 
+1

Dziękuję za odpowiedź .. Ale w przypadku sprawdzania ciągu wiadomości e-mail "@" należy uważać za razem z ".", "_" Itp.Czy są jakieś niejawne metody, które mogę sprawdzić. – Kumar

+0

#Neeraj: czy możesz również podać zakres Unicode dla wszystkich znaków o pełnej szerokości. – Kumar

2

Można spróbować czegoś takiego:

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

użycia wyrażenia regularnego tutaj. \ W służy do sprawdzania nie-słów.

str będzie zawierać pełną szerokość charakter jeśli następujące oświadczenie return true:

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

+0

Od sprawdzania wiadomości e-mail. muszę sprawdzić, czy znaki specjalne mają pełną szerokość. – Kumar

2

Nie jestem pewien, czy szukasz jednego lub wszystkich, więc tutaj są funkcje dla obu:

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

Co do szerokości pół '.' i ewentualnego '_'. Rozebrać je najpierw z zastąpienia może:

String str="abc@gmail.com"; 

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

Regex

Alternatywnie, jeśli chcesz używać regex do testowania, to jest rzeczywisty zakres znaków dla pełnej szerokości:

[\uFF01-\uFF5E] 

Tak więc metoda wygląda następująco:

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

Możesz dodać do niej swoje inne postacie i więc nie trzeba ich rozbierać:

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

Dziękujemy za Twój kod. Ale nie powinienem ignorować "." , "_" i dowolne znaki specjalne. Ponieważ mogą być również w pełnej szerokości. Czy możesz dać mi znać zakres Unicode dla pełnej szerokości, w tym znaki specjalne zbyt. – Kumar

+1

Dobrze twój przykład nie obejmuje pełnej wersji okresu. Dałem ci pełny zakres postaci o pełnej szerokości. – weston

+0

'str.matches (" [\\ uff01 - \\ uff5E] * ")' Należy to zrobić. Jeśli nie, prawdopodobnie wynika to z faktu, że nie jest to cała pełna szerokość, jak na przykład opublikowany przez Ciebie przykład. – weston