2015-04-08 4 views
5

Может ли кто-нибудь предложить мне, как проверить, содержит ли String символы полной ширины в Java? Символы, имеющие полную ширину, являются специальными символами.как проверить, имеет ли String полный символ ширины в java

Полные символы ширины в строках:

abc@gmail.com

полуширина символы в строках:

[email protected]
+0

метод содержит информацию об этом. итерации по строке, содержащей только те «символы полной ширины», и для каждого запускают метод contains на вашей String. – Stultuske

+0

Да, я тоже проверил. Но код выглядит грязным, однако в приведенном выше случае я проверяю электронную почту. поэтому я должен проверить некоторые дополнительные символы, такие как @,. , _ и т. д. – Kumar

+0

Вы ищете ** все ** полную ширину или ** любую ** полную ширину? то есть какой результат вы хотите, когда смесь полна и половина? – weston

ответ

2

Вы можете сравнить UNICODE С Юникодом для алфавитов (Алкмаар) 97-122, Таким образом, вы можете легко diffrentiate между двумя

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

для ввода

abc@gmail.com 

Выход

65345 
+1

Благодарим вас за ответ. Но в случае проверки строки электронной почты «@» необходимо учитывать также «.», «_» И т. Д.Существуют ли какие-либо неявные методы, с которыми я могу проверить. – Kumar

+0

#Neeraj: можете ли вы также сообщить мне диапазон Unicode для всех символов полной ширины. – Kumar

2

Вы можете попробовать что-то вроде этого:

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

использовать регулярное выражение здесь. \ W используется для проверки символов, отличных от слова.

ул будет содержать полную ширину символа, если следующий оператор возвращает истину:

логический флаг = str.matches ("\\ W");

+0

Так как я проверяю электронные письма. Мне нужно проверить, имеют ли какие-либо специальные символы полную ширину. – Kumar

2

Я не уверен, если вы ищете или все, так что здесь функции для обоих:

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

Как для полуширины '.' и возможного '_'. Зачистите их сначала с заменой, может быть:

String str="abc@gmail.com"; 

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

Regex

В качестве альтернативы, если вы хотите использовать регулярное выражение для проверки, то это реальный диапазон символов для полной ширины:

[\uFF01-\uFF5E] 

Таким образом, способ тогда выглядит следующим образом:

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

Вы можете добавить к нему других персонажей и поэтому их не нужно снимать:

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

Спасибо за ваш код. Но я не должен игнорировать ". , "_" и любой из специальных символов. Потому что они могут быть в полной ширине. Можете ли вы сообщить мне диапазон Unicode для полной ширины, включая специальные символы тоже. – Kumar

+1

Ну ваш пример не включает полную версию периода ширины. И я дал вам полный спектр символов полной ширины. – weston

+0

'str.matches (" [\\ uff01 - \\ uff5E] * ")' Должен это делать. Если это не так, это, вероятно, потому, что на самом деле это не полная ширина, как пример, который вы опубликовали. – weston

Смежные вопросы