Как найти слова в диапазоне в TreeSet <String>с помощью регулярных выражений (Java) - PullRequest
1 голос
/ 25 ноября 2008

Я перебираю TreeSet и распечатываю его:

while (it.hasNext()) {
  System.out.println(it.next());
}

выход:

after
explorers
giant
hoping
internet
into
.
.
.
virtual 
world

Однако я бы хотел только распечатать те строки, у которых первый символ находится в диапазоне m-z. Я играл с java.util.regex, но безуспешно:

String pattern = "[^m-z]";

У меня есть правильная идея здесь? Или есть более простой способ сделать это? Все, что я хочу сделать, это убедиться, что я распечатал только те строки в TreeSet, первый символ которых находится в диапазоне m-z.

Ответы [ 5 ]

5 голосов
/ 25 ноября 2008

Прежде всего, ваше регулярное выражение неверно. Вы хотите

"^[m-z]"

Во-вторых, вы не показываете код, который используете для сопоставления.

В-третьих: если вы готовы что-то делать, кроме регулярных выражений и итераций, вам следует изучить SortedSet.tailSet. Это, вероятно, то, что хочет ваш учитель.

4 голосов
/ 25 ноября 2008

Я не знаю о регулярных выражениях, но вы легко можете найти те элементы, которые начинаются с буквы от m-z:

wordSet.tailSet("m", true);

Обычно вы используете subSet () с нижней границей и следующий символ из верхней границы, но поскольку z - последний символ, который не может быть легко выполнен.

Чтобы получить набор от 'b' до 'y', вы должны сделать

wordSet.subSet("b", true, "z", false);
3 голосов
/ 25 ноября 2008

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

while (it.hasNext()) {
    String element = it.next();
    if (element.toLowerCase().matches("^[m-z].*")) {
        System.out.println(element);
    }
}
2 голосов
/ 25 ноября 2008

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

while (it.hasNext()) {
    String element = (String) it.next();
    char c = element.charAt(0);
    if (c >= 'm' && c <= 'z') {
        System.out.println(element);
    }
}

Это, кажется, соответствует его требованию, изложенному жирным шрифтом в первоначальном вопросе, хотя, возможно, его учитель диктовал использование регулярных выражений.

РЕДАКТИРОВАТЬ: Я только сейчас прочитал полный вопрос. Тем не менее, я все еще думаю, что важно понимать, что регулярные выражения - не единственный способ решить эту проблему.

2 голосов
/ 25 ноября 2008

кажется домашним заданием, но в любом случае, «[^ m-z]» означает НЕ m-z

попробуйте поставить "^" за пределами "[]"

Взгляните на класс Pattern и кстати, попробуйте String.matches()

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