Ограничители сканера, рег. Проблема выражения - PullRequest
2 голосов
/ 14 июня 2011

У меня небольшая проблема с использованием рег. выражения со сканером

вот код:

String name;
    Pattern p = Pattern.compile("\\s+|\\W+|\\_+");
    ArrayList<String> reay = new ArrayList<String>(1000);
    try {
        Scanner asdf = new Scanner(new File(s)).useDelimiter(p);
        while (asdf.hasNext()) {
            name = asdf.next();
            reay.add(name);

        }
        asdf.close();
    }

и полученный массив (с использованием большого количества несловарных символов в текстовом файле):

[arst, , tdnxc, , rst, , arst, , arst, wfp, arst, , arst]

не уверен, что мне не хватает и почему я получаю пустые записи в моем массиве

Ответы [ 2 ]

4 голосов
/ 14 июня 2011

Ваше регулярное выражение соответствует одному или нескольким пробелам, затем ИЛИ, одному или нескольким несловам, затем ИЛИ, одному или нескольким подчеркиваниям.

Так что для ввода "$ _" будет сказано, что пробел - это совпадение!Запишите, что находится перед следующим разделителем ... $ - это совпадение!Вернуть пустую строку между пробелом и $.Захватите то, что находится перед следующим разделителем .. _ это совпадение!вернуть пустую строку между $ и _.

Я думаю, вы имели в виду, что ваш разделитель будет:

[\\s\\W_]+
0 голосов
/ 14 июня 2011

Возможно, потому что вы используете пробел ИЛИ несловарные символы ИЛИ подчеркивание в качестве разделителя. Что произойдет, если вы, например, смешали ли несколько из них сразу друг за другом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...