Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсинг строки с помощью regex 
:(
    Опции темы
ayscha
Дата 29.11.2010, 05:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 10.9.2010

Репутация: нет
Всего: нет



Добрый день, всем,

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

Передо мной стоит следующая задача.
Пользователь вводит с консоли набор слов, разделенных пробелами. Например, "     word1 sdsd rr      ".
Понимаю, что задача парсинга этой строки должна быть проще некуда.. но все же..

пробовала 2мя способами.
первый:
Код

String[] tockens = inputLine.split("\\s+");

Этот вариант не подошел, так как сплит возвращает пустые элементы в начале (и по-моему в конце) массива tockens. Не хочется выполнять лишние действия, удаляя пустые элементы..

второй:

Код

String regex = "[\\s*(\\w+)\\s*]*";                 //пытаюсь задать повторяющуюся последовательность
Pattern pattern = Pattern.compile(regex);
Matcher m = pattern.matcher(line);
m.matches() ;                                               //!!! возвращает true

int count = m.groupCount();
for(int i = 1; i <= count; i++){
       m.group(i);                                        // возвращается одна группа с одним пустым элементом массива
}


В общем, буду очень признательна, если знающие и опытные люди подскажут решение этой тривиальной задачки smile)


PM MAIL   Вверх
dorogoyIV
Дата 29.11.2010, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



 smile  забыла написать - что нужно получить?!
то ли первое слово, то ли массив слов, ...  smile 
PM MAIL   Вверх
MisterCleric
Дата 29.11.2010, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 5
Всего: 38



Привет. 
Так а в чем, собственно, проблема? Зачем выдумывать велосипед с двумя с половиной колес:
Код

String[] words = inputLine.trim().split("\\s+");



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
ayscha
Дата 29.11.2010, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 10.9.2010

Репутация: нет
Всего: нет



ну да, получить массив. smile))

по поводу trim - утром сама об этом подумала. да. это самый простой вариант.

но все-же мне не ясно, что не так с моим regex-выражанием в матчере..? smile
PM MAIL   Вверх
korob2001
Дата 6.12.2010, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 1
Всего: 61



Как вариант:
Код

import java.util.*;

public class TokenizerSample {
    public static void main(String[] args) {
        String inStr = "  This      is    a    test      message   ";
        StringTokenizer tokenizer = new StringTokenizer(inStr, " ", false);
        while (tokenizer.hasMoreElements()) {
            String word = tokenizer.nextToken();
            System.out.println(word);
        }
    }
}



--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Kircul
Дата 6.12.2010, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 20.2.2007

Репутация: 6
Всего: 7



Цитата(ayscha @  29.11.2010,  10:11 Найти цитируемый пост)
но все-же мне не ясно, что не так с моим regex-выражанием в матчере..? smile 

Код

Matcher m = Pattern.compile("\\s*(\\p{Alnum}+)\\s*")
        .matcher("     word1 sdsd rr      ");
for (int i = 0; m.find();) {
    System.out.println(i++ + " -> (" + m.group(1) + ")");
}

PM   Вверх
Egik2
Дата 7.12.2010, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 29.7.2008
Где: Агудзера

Репутация: нет
Всего: 11



Честно говоря, использовать matcher в таком контексте не приходилось, если хочешь разделить строку с помощью регекспов, то можешь так:
Код

import java.util.regex.Pattern;


public class Test1 {
    public static void main(String[] args) {
        String line = "hello bye privet poka";
        String regex = "\\s+";  
        Pattern pattern = Pattern.compile(regex);
        String[] str = pattern.split(line);                                          
        for(int i = 0; i < str.length; i++){
               System.out.println(str[i]);                                       
        }
    }
}


Но в любом случае - это не лучший и не быстрый вариант.
Лучше все таки использовать Stringовый split и trim как тебе советовал MisterCleric


--------------------
Три великие добродетели программиста: лень, нетерпение и самомнение (Larry Wall)
a-nav.com
developer-blog.ru
world-poetry.org
PM MAIL WWW ICQ   Вверх
ayscha
Дата 14.12.2010, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 10.9.2010

Репутация: нет
Всего: нет



Большое спасибо за ваши ответы smile))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.