2014-11-07 1 views
4

Мне нужно проверить символ только для верхнего регистра A-Z. Не любой другой специальный юникод или другие языки.Тест только для английского языка A-Z верхний регистр символа

Я читал документацию для Character.isUpperCase. Похоже, что это пройдет, если бы это был символ Юникода, который считался прописным, но не технически между A-Z. И, похоже, он пропускает символы верхнего регистра с других языков, кроме английского.

Мне просто нужно использовать регулярные выражения или я читаю в Character.isUpperCase неправильно?

Благодаря

+1

Да, лучше использовать регулярные выражения. – sp00m

+2

Не можете ли вы использовать коды символов из кодового символа '' A'' в '' Z'', чтобы определить, находится ли символ между ними? – EpicPandaForce

+0

Попробуйте использовать код ASCII или регулярное выражение. –

ответ

8

Из документации вы связаны:

Многие другие символы Юникода в верхнем регистре тоже.

Так что да, использование isUpperCase будет соответствовать вещам, отличным от A-Z. Один из способов сделать тест, хотя вот так.

boolean isUpperCaseEnglish(char c){ 
    return c >= 'A' && c <= 'Z'; 
} 
2

isUpperCase действительно не обещает характер между 'A' и 'Z'. Вы можете использовать регулярное выражение:

String s = ...; 
Pattern p = Pattern.compile("[A-Z]*"); 
Matcher m = p.matcher(s); 
boolean matches = m.matches(); 
+1

Вопрос только о совпадении только одного символа. Не будет ли регулярное выражение только «[A-Z]»? (но я думаю, что регулярное выражение немного переборщило с целью вопроса) – Vinze

0

Character.isUpperCase() ли принимать вещи на основе от других языков. Например, Ω будет считаться прописным.

Но вы можете сделать проверку, чтобы убедиться, что между A и Z:

public static boolean isUpperCaseInEnglish(char c) { 
    return (c >= 'A' && c <= 'Z'); 
} 

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

  • Нет связанных вопросов^_^