2013-12-05 3 views
0

У меня есть некоторые строки кода, которые проверяют скобки в строке.Специальный символ Java в условном

while (index <= command.length()-1 && done == false) { 
     if (command.charAt(index) == 123){ //ASCII value for open bracket 
      braces++; 
      token = token + command.charAt(index); 
      index++; 
     } 
     else if (command.charAt(index) == 125){ 
      braces--; 
      token = token + command.charAt(index); 
      index++; 
     } 
     else if (braces > 0){ 
      if (command.charAt(index) > 47 && command.charAt(index) < 58 || command.charAt(index) > 64 && command.charAt(index) < 123){ 
       token = token + command.charAt(index); 
       index++; 
      } 
      else 
       index++; 
     } 
     else if (braces == 0){ 
      if (command.charAt(index) > 47 && command.charAt(index) < 58){ 
       token = token + command.charAt(index); 
       index++; 
       if (command.charAt(index) == 123) 
        done = true; 
      } 
      else{ 
       index++; 
       done = true; 
      } 
     } 
    } 

Проблема у меня есть с этой линией: if (command.charAt(index) == 123) Используя значения ASCII для проверки A-Z и 0-9 работал отлично, но когда я шагаю через отладчик, условные для скобок обязательно каждый раз. Нельзя ли использовать условное выражение?

+0

Почему вы не являетесь регулярным выражением для этого http://stackoverflow.com/questions/5034580/comparing-chars-in-java –

ответ

1

Просто используйте символ примитива:

if (command.charAt(index) == '['){ //Note the single quotes; double quotes won't work 

Производит более четкий код и всегда работает.

0

Попробуйте запустить этот эксперимент:

public class Test { 
    public static void main(String[] args) { 
     System.out.println(Character.getNumericValue('[')); 
    } 
} 

и обратите внимание, что она возвращает -1.

Из API:

Возвращает: числовое значение символа, как неотрицательного Int значение; -2, если символ имеет числовое значение, которое не является неотрицательным целым числом ; -1, если символ не имеет числового значения.

Так правильный способ сделать это

command.charAt(index) == '[', как было указано.

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