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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Извлечение слов из строки, Строки в Java 
:(
    Опции темы
vinograd2008
Дата 1.5.2009, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



 Здравствуйте, помогите пожайлуста сделать.

 Как в Java выбрать первые N входящие в строку слова, начинающиеся с заглавной буквы?

 Заранее спасибо.
PM MAIL   Вверх
nucer
Дата 1.5.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 21.6.2004
Где: Москва

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



Ну можно например так, думаю не самое плохое решение, приходящее в голову... ))
Код

String str = "Вася вышел погулять по Москве и поехал на троллейбусе до Красной площади";
String[] words = str.split( " " );
Vector <String>needed = new Vector<String>();
for ( int i = 0 ; i < words.length ; i++ )
{
    if ( Character.isUpperCase( words[i].charAt( 0 ) ) )
    {
        needed.add( words[i] );
    }
}

PM MAIL   Вверх
VAngeL86
Дата 1.5.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Могу посоветовать использовать метод 
Код

String[] split(String regex); 

Он позволит разбить строку на несколько используя в качестве разделителя символ подходящий под регулярное выражение regex.
пример: 
Код

String s = "I love java"; 
String[] s2 = s.split(" ");//в качестве разделителя используем пробел 
//массив s2 будет содержать 3 элемента "I", "love", "java"

А потом можешь пробежать по всем словам (элементам массива), проверяя каждое на соответствие твоему условию. Проверять можно так:
Код

if ( s.toUpperCase().charAt(0) == s.charAt(0) )


P.S. Пока писал, ответ уже запостили  smile 

Это сообщение отредактировал(а) VAngeL86 - 1.5.2009, 14:55
PM MAIL ICQ   Вверх
JVMan
Дата 1.5.2009, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



можно и так:

    StringTokenizer st =   new StringTokenizer(someText);
        while(st.hasMoreElements())
         if ( Character.isUpperCase( st.nextToken().charAt(0) ) )
             ...

PM MAIL   Вверх
nucer
Дата 1.5.2009, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 21.6.2004
Где: Москва

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



Раз тут столько умников собралось давайте расширим задачу? )
Строка может являться, например, html-кодом или просто, содержать знаки препинания... Как лучше всего из неё "выдрать" слова (именно слова т.е. буквы)? Причем строка не обязательно на русском или английском, можт и на турецком или китайском (юникод же))
Код

String str = "Вася вышел погулять по <a href=\"http://ru.wikipedia.org/wiki/Москва\" >Москве</a>. Дойдя до остановки, он поехал на троллейбусе до Красной площади!";

Как насчет такого ? )

Это сообщение отредактировал(а) nucer - 1.5.2009, 20:14
PM MAIL   Вверх
belarusrulez
Дата 1.5.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

int key = 2;
        String input = "Вася вышел погулять по <a href=\"http://ru.wikipedia.org/wiki/Москва\" >Москве</a>. Дойдя до остановки, он поехал на троллейбусе до Красной площади!";
        Pattern pattern = Pattern.compile("<(.*?)>");
        Matcher matcher = pattern.matcher(input);
        while (matcher.find()) {            
            input = input.replaceAll(matcher.group(0), "");
        }        
        pattern = Pattern.compile("[A-ZА-Я](.*?)(\\s|\"|<)");
        matcher = pattern.matcher(input);
        while (matcher.find()) {
            System.out.println(matcher.group(0));
            key--;
            if (key == 0) {
                break;
            }
        }

или так...
а вот так с выдиранием тегов

Это сообщение отредактировал(а) belarusrulez - 1.5.2009, 20:38
PM MAIL ICQ   Вверх
nucer
Дата 2.5.2009, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 21.6.2004
Где: Москва

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



Цитата(belarusrulez @ 1.5.2009,  20:32)
или так...
а вот так с выдиранием тегов

Цитата
Причем строка не обязательно на русском или английском, можт и на турецком или китайском (юникод же))
есть ещё мысли? ))
PM MAIL   Вверх
JVMan
Дата 4.5.2009, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(nucer @ 1.5.2009,  20:09)
Раз тут столько умников собралось давайте расширим задачу? )
Строка может являться, например, html-кодом или просто, содержать знаки препинания... Как лучше всего из неё "выдрать" слова (именно слова т.е. буквы)? Причем строка не обязательно на русском или английском, можт и на турецком или китайском (юникод же))
Код

String str = "Вася вышел погулять по <a href=\"http://ru.wikipedia.org/wiki/Москва\" >Москве</a>. Дойдя до остановки, он поехал на троллейбусе до Красной площади!";

Как насчет такого ? )

Можно решить так:
1) Для начала парсинг HTML кода
2) Вступает тот же StringTokenizer.

Код

  String input = "Вася вышел погулять по <a href=\"http://ru.wikipedia.org/wiki/Москва\" >Москве</a>. Дойдя до остановки, он поехал на троллейбусе до Красной площади!";

        final StringBuilder builder = new StringBuilder();
        try {
            HTMLEditorKit.ParserCallback callback = new HTMLEditorKit.ParserCallback() {

                @Override
                public void handleText(char[] data, int pos) {
                    builder.append(data);
                }
            };
            Reader reader = new StringReader(input);
            new ParserDelegator().parse(reader, callback, false);

            StringTokenizer st = new StringTokenizer(builder.toString(), " ,.!?");
            while (st.hasMoreTokens()) {
                JOptionPane.showMessageDialog(null, st.nextToken());
            }


        } catch (IOException ex) {
            ex.printStackTrace();
        }


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.1280 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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