2012-02-07 2 views
0

Я хочу проверить строку, чтобы увидеть, содержит ли она символ ^, и если она отображает сообщение пользователю.Проверка символа^в строке java

Благодаря

Pattern p = Pattern.compile("[a-z0-9 ]", Pattern.CASE_INSENSITIVE); 
Matcher m = p.matcher("StringGoesHere"); 
boolean b = m.find(); 

if (b){ 
    System.out.println("bad"); 
} else { 
    System.out.println("fine"); 
} 
+0

Итак, каков ваш вопрос? – simchona

+0

... Добавьте его в шаблон и убегите с ним '\'. –

ответ

15

регулярное выражение может быть излишним, просто использовать String.contains()

Если вы хотели бы использовать регулярное выражение, используйте "\\^": \\ обеспечит единый \, который нарушая особый смысл символа ^.

+2

Я думаю, вы обнаружите, что String.indexOf (char) довольно немного быстрее, чем String.contains (CharSequence), когда поиск одного символа. –

+1

@ TheRealBaumann: Микро-оптимизация. Я считаю, что большинство компиляторов будут обрабатывать два утверждения одинаково [предполагая, что строка является литералом с постоянным символом]. 'contains()' более читабельна. Помните: оптимизация предназначена для компиляторов, а читаемость предназначена для программистов. – amit

+1

Реализация Java содержит фактически просто вызовы String.indexOf (CharSequence.toString()), поэтому вы имеете дело с приведением из String в CharSequence обратно в String для наиболее часто используемых целей. –

1
Pattern p = Pattern.compile("\\^"); 
+0

Это будет фактически соответствовать * началу строки *. –

+0

Разве это не «начало строки», если не сбежать? –

+0

(отредактировано с тех пор, поэтому эти комментарии больше не применяются. Выражение «'^»' then) –

10

Почему просто не

String str = "StringGoesHere"; 
if(str.indexOf('^') != -1) 
{ 
    System.out.println("bad"); 
} 
else 
{ 
    System.out.println("fine"); 
} 
1

На самом деле, самый простой ответ был бы: не использовать регулярное выражение, просто для поиска самого характера.

Более длинный ответ: см. Подробности синтаксиса регулярных выражений на escaping.

В классах классов, ^ является только специальным, если это Первый символ. Так [a-z^] будет соответствовать любому из a-zили^, а [^a-z] матчей все, кроме a-z^, как первый символом отрицание).

Вне класса символов, ^ соответствует началу строки, если вы не избежите ее с \. А для встроенных строк Java вам нужно написать это как "\\^".

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