Какой скрытый символ может быть в моем коде в JAVA? - PullRequest
0 голосов
/ 10 октября 2018

Я использую анализатор lex и столкнулся с некоторыми проблемами.После прочтения всех символов из исходного кода я помещаю их в строку, и я читаю символ за символом и выполняю соответствующие операции.В конце концов, создается список, содержащий языковые жетоны, пробелы, ломаные линии и ... чертов символ, который я не могу опознать и который нужно очистить.

for (int i = 0; i < tokenList.size(); i++) {
    // Remove Espacos
    if (tokenList.get(i).getLexema().equals(" ")) {
        tokenList.remove(i);
    }
    // Remove Strings Vazias
    else if (tokenList.get(i).getLexema().length() == 0) {
        print("ada");
        tokenList.remove(i);
    }
    // Remove Tabulação
    else if (tokenList.get(i).getLexema().equals("\t")) {
        tokenList.remove(i);
    }
    // Remove Quebras de Linha
    else if (tokenList.get(i).getLexema().equals("\n")) {
        print("ASD");
        tokenList.remove(i);
    }
}

Из следующей записи:

int a;
char n;

После всего анализа и очистки я получаю следующий результат:

00 - Lex: int
01 - Lex: a
02 - Lex: ;
03 - Lex: 
04 - Lex: char
05 - Lex: n
06 - Lex: ;

Есть пустое пространство, и я не знаю, как его удалить.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Альтернативным и более простым решением является использование Character.isWhitespace().Поэтому ваш код может быть таким простым:

for (int i = 0; i < tokenList.size(); i++) {
    String lexema = tokenList.get(i).getLexema();
    char c = lexema.charAt(0);

    if (Character.isWhitespace(c)) {
        tokenList.remove(i);
        i = i - 1;
    }
}
0 голосов
/ 10 октября 2018

РЕШЕНИЕ:

Ну, эти ребята невероятные, и я могу решить мою проблему.Решение, использующее несколько лучших стратегий кодирования:

for (int i = 0; i < tokenList.size(); i++) {
    String lexema = tokenList.get(i).getLexema();

    switch (lexema) {
        case "":
            tokenList.remove(i);
            i = i - 1;
            break;
        // Remove Espacos
        case " ":
            tokenList.remove(i);
            i = i - 1;
            break;
        // Remove Tabulações
        case "\t":
            tokenList.remove(i);
            i = i - 1;
            break;
        // Remove Quebras de Linha
        case "\n":
            tokenList.remove(i);
            i = i - 1; // DEIXAR SEM O BREAK
            break;
        // Remove Caractere Estranho
        case "\r":
            tokenList.remove(i);
            i = i - 1;
            break;
        default:
            break;
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...