Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Не могу составить RegEx


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

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

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

Автор: 5ad1sT 18.9.2010, 18:34
Цитата(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", "***"));

Автор: 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 *"

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

Автор: 5ad1sT 18.9.2010, 22:48
Цитата(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 

Автор: dobrolub 19.9.2010, 00:43
Код

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("*"));

  }

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

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

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

 smile 

Автор: dorogoyIV 19.9.2010, 04:26
я понял. если встретилось слово 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 

Автор: Joil 19.9.2010, 08:13
Цитата(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. Так что вопрос пока не закрыт.

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

Но почитать всё же стоили http://sites.google.com/site/kemiisto/article/tregexpr.

Так?
Код

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("****"));
    }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)