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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу составить RegEx, Замена слов в предложении 
:(
    Опции темы
Joil
Дата 18.9.2010, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всем привет!
С регексом не очень дружу, т. к. не часто сталкиваюсь!
Вот есть задача: есть строка (текст) и слово которое нужно заменить в тексте звездочками. Слова в тексте разделены не буквенными символами. Вроде все просто, но что то у меня не работает:
Код

s.replaceAll("[^\w]{1}" + w + "[^\w]{1}", "*")

Подскажите плиз! Как сделать?
--------------------
Who had deceived thee so often as thyself? © Benjamin Franklin--------------------Always bear in mind that your own resolution to succeed is more important than any other. © Abraham Lincoln--------------------If you need it - do it, if you want it - take it! © ...
PM MAIL ICQ   Вверх
5ad1sT
Дата 18.9.2010, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Joil @ 18.9.2010,  16:33)
Всем привет!
С регексом не очень дружу, т. к. не часто сталкиваюсь!
Вот есть задача: есть строка (текст) и слово которое нужно заменить в тексте звездочками. Слова в тексте разделены не буквенными символами. Вроде все просто, но что то у меня не работает:
Код

s.replaceAll("[^\w]{1}" + w + "[^\w]{1}", "*")

Подскажите плиз! Как сделать?

Я не очень понял задачи (какая конкетно строка), но может такой вариант подойдет?

Код

String str = "slo fsd plohoe_slovo fs djk fksdkj plohoe_slovo fkjsdkjplohoe_slovofjsdjk fskfsdf";

System.out.println(str.replaceAll("plohoe_slovo", "***"));

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


Бывалый
*


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

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



Цитата(5ad1sT @  18.9.2010,  18:34 Найти цитируемый пост)
Я не очень понял задачи (какая конкетно строка), но может такой вариант подойдет?

Ну вот если на примере то нужно следующее.
Допустим есть строка:
Код

String s = "read write reading write read_one read, read2 writing read"

Нужно заменить слово:
Код

String w = "read"

В итоге должно получится следующее:
Код

"* write reading write read_one *, read2 writing *"

Ну вот как то так.
--------------------
Who had deceived thee so often as thyself? © Benjamin Franklin--------------------Always bear in mind that your own resolution to succeed is more important than any other. © Abraham Lincoln--------------------If you need it - do it, if you want it - take it! © ...
PM MAIL ICQ   Вверх
5ad1sT
Дата 18.9.2010, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Joil @ 18.9.2010,  20:17)
Цитата(5ad1sT @  18.9.2010,  18:34 Найти цитируемый пост)
Я не очень понял задачи (какая конкетно строка), но может такой вариант подойдет?

Ну вот если на примере то нужно следующее.
Допустим есть строка:
Код

String s = "read write reading write read_one read, read2 writing read"

Нужно заменить слово:
Код

String w = "read"

В итоге должно получится следующее:
Код

"* write reading write read_one *, read2 writing *"

Ну вот как то так.

Код

 String str = "slo fsd plohoe_slovo fs djk fksdkj plohoe_slovo fkjsdkjplohoe_slovofjsdjk fskfsdf";

 str.replaceAll("\\splohoe_slovo\\s", " * ");


Может так?  smile 

Это сообщение отредактировал(а) 5ad1sT - 18.9.2010, 22:49
PM MAIL   Вверх
dobrolub
Дата 19.9.2010, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

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



Код

public static void main(String[] args)
  {
    Pattern p = Pattern.compile("xxx");

    Matcher m = p.matcher("we can no longer use xxx ...");

    System.out.println(m.replaceAll("*"));

  }

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


Эксперт
***


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

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



Цитата(Joil @  18.9.2010,  16:33 Найти цитируемый пост)
слово которое нужно заменить в тексте звездочками

может вопрос не корректно поставлен?
если так, то:
Код

 String s = "slovo b u k v a"
 System.out.println(s.replace("slovo", "*"));

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


Эксперт
***


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

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



я понял. если встретилось слово read2 , его заменять не нужно. так?
тогда :
Код

 String s = "read write reading write read_one read, read2 writing read";
 StringTokenizer st = new StringTokenizer(s);
 String str = "", ss = "";

 while(st.hasMoreTokens())
 {
  str = st.nextToken();
  
  if(str.equals("read"))
   str = st.nextToken(); // здесь пишешь str = "*";

  ss += str + " ";
 }
 System.out.println(ss.trim());

возможны ошибки, я не компилировал  smile 

Это сообщение отредактировал(а) dorogoyIV - 19.9.2010, 04:35
PM MAIL   Вверх
Joil
Дата 19.9.2010, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(dorogoyIV @  19.9.2010,  04:26 Найти цитируемый пост)
возможны ошибки, я не компилировал  smile 

Спасиб dorogoyIV, чуток подкоректировал:
Код

    public static void main(String[] args) {
        String s = "read write reading writing read, read0 read book\tread null\nread work read";
        String w = "read";
        StringTokenizer st = new StringTokenizer(s, " \n\t,.;:()!?", true);
        String str = "", ss = "";
        while (st.hasMoreTokens()) {
            str = st.nextToken();
            if (str.equals(w)) {
                str = "*";
            }
            ss += str;
        }
        System.out.println(ss);

работает.
На первое время пойдет. Но задача именно в том что бы все это сделать с помощью regexa. Так что вопрос пока не закрыт.
--------------------
Who had deceived thee so often as thyself? © Benjamin Franklin--------------------Always bear in mind that your own resolution to succeed is more important than any other. © Abraham Lincoln--------------------If you need it - do it, if you want it - take it! © ...
PM MAIL ICQ   Вверх
kemiisto
Дата 19.9.2010, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Цитата(Joil @  18.9.2010,  17:33 Найти цитируемый пост)
 регексом не очень дружу, т. к. не часто сталкиваюсь!

Но почитать всё же стоили хоть что-нибудь.

Так?
Код

import java.util.regex.*;

public class App {
    public static void main(String[] args) {
        String string = "read write reading write read_one read, read2 writing read";
        Pattern pattern = Pattern.compile("\\bread\\b");
        Matcher matcher = pattern.matcher(string);
        System.out.println(matcher.replaceAll("****"));
    }
}



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

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

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


 




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


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

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