Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > как сделать так чтобы Character "\n" не находился


Автор: Nin 18.12.2004, 15:30
Привет всем.

проблема с регами...
никак не могу сделать так чтобы Character "\n" не находился,
Вот есть такой string = "[{ 1],\n{ 2],\n{ 3]]"
в нем нужно наити { 1]
Ищу вот таким выражением: ".\\{\\s+\\d.+"

не берёт smile

вот здесь говорят что надо DOTALL флаг вырубить:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html#lt

как это зделать не доганяю...

Заранее благодарен,

Ильдар

Автор: Oracle 18.12.2004, 16:57
Цитата
никак не могу сделать так чтобы Character "\n" не находился,

Причем тут \n?
Цитата
не берёт

Ты лучше скажи, какая строка у тебя выдается?Что находит??У меня находит
"[{ 1],", а у тебя что-то не берет.......

А вообще попробуй "\\{\\s+[1]\\]" , у меня находит именно то, что ты ищешь: "{ 1]".

Автор: Nin 18.12.2004, 17:18
проблема:
".\\{\\s+\\d.+" ищем в "[{ 1]," == тrue
".\\{\\s+\\d.+" ищем в "[{ 1],\n{ 1],\n{ 1]]" == false

Автор: Leopard25 18.12.2004, 17:30
а сравниваешь через .equals ?

Автор: Oracle 18.12.2004, 17:54
Когда вы научитесь писать подробно?Телепатов тут нет (Эт из правил).

Nin
проблема:
".\\{\\s+\\d.+" ищем в "[{ 1]," == тrue
".\\{\\s+\\d.+" ищем в "[{ 1],\n{ 1],\n{ 1]]" == false

Что это означает??
Ты ищешь в первой строке и находишь то , что нужно, а когда ищешь во второй строке не находишь??
Или то, что ты нашел в первой строке совпадает с "[{ 1]," (выдает true), а то что нашел во второй строке не совпадает с "[{ 1]," (то есть выдает false?) При этом, как спросил Leopard25 сравниваешь через equals()?И при этом если просто выводить искомое, то результат и в первом и во втором будет "[{ 1],"

P.S Проще приведи кусок кода.

Глянь сюда:
Код

import java.util.regex.*;

public class Checker {
   public static void main(String args[]) {
       String str =  "[{ 1],\n{ 1],\n{ 1]]";
        Matcher m = Pattern.compile(".\\{\\s+\\d.+").matcher(str);
       StringBuffer sb = new StringBuffer();
       while(m.find()) {
       for (int j = 0;j <= m.groupCount();j++)
       {
    sb.append(m.group(j));
    }
           System.out.println(sb);
    System.out.println(sb.toString().equals("[{ 1],"));
   }
   }
}

Все правильно работает.

Автор: Nin 18.12.2004, 18:50
Да как ещё обяснить, вопрос то такой простенькии.

".\\{\\s+\\d.+" ищем в "[{ 1]," == тrue
".\\{\\s+\\d.+" ищем в "[{ 1],\n{ 1],\n{ 1]]" == false

в первом случае: ищу и нахожу.
во втором: ищу и не нахожу.

а мне нужно находить в обоих случаях.

Автор: Oracle 18.12.2004, 18:53
Смотри выше.....Попробуй..Результаты скажи....Вроде все находит...Везде все правильно.

Автор: Nin 18.12.2004, 18:55
а целью является доказать что "{" было 3 раза ;)
Код

String reg = ".\\{\\s+\\d.+";   //\\u000A\\{\\s+\\d.+\\u000A\\{\\s+\\d.+
Pattern p = Pattern.compile(reg);
String look = "[{    1],\n{    1],\n{    1]]";
Matcher m = p.matcher(look);
boolean b = m.matches();
System.out.println("Result is: " + b);


Автор: Oracle 18.12.2004, 19:02
Код

import java.util.regex.*;

public class Checker {
   public static void main(String args[]) {
       String str =  "[{ 1],\n{ 1],\n{ 1]]";
        Matcher m = Pattern.compile("\\{").matcher(str);
       while(m.find()) {
           for(int i = 0; i <= m.groupCount();i++){
               System.out.print(m.group(i));
           }

       }
   }
}


или доказать, что три раза было { 1]?

Автор: Nin 18.12.2004, 19:08
у меня вот это не работает smile
Код



String str =  "[{   1],\n{   1],\n{   1]]";
         Matcher m = Pattern.compile(".\\{.+\\{.+\\{.+").matcher(str);
        StringBuffer sb = new StringBuffer();
 while(m.find()) {
        for (int j = 0;j <= m.groupCount();j++)
         {
      sb.append(m.group(j));
      }
 System.out.println(sb);
      System.out.println(sb.toString().equals("[{ 1],"));

Добавлено @ 19:15
Код

Спасибо, всё работает!!!

       String str =  "[{ 1],\n{ 1],\n{ 1]]";
        Matcher m = Pattern.compile("\\{").matcher(str);
 int i = 0;
       while(m.find()) {
        i ++;
       }

System.out.println(i);


Автор: Oracle 18.12.2004, 19:16
Если ты хочешь проверить, кол-во "{" то пиши просто //{ как у меня в примеру,глянь выше.
А потом просто проверь кол-во групп.
А как ты хочешь, чтобы у тебя выдало true эта строка
Код

System.out.println(sb.toString().equals("[{ 1],"));

Когда ты ищешь не "[{ 1]," , а "{"
P.S Код постарайся писать правильно, это действительно будет хорошо. Расположение кода, я имею ввиду.
Добавлено @ 19:18
С переменной тоже можно. А можно просто проверить кол-во групп. Mathcer.groupCount().
P.S Что бы ты знал, на всякий случай.Мне кажется так будет код выглядеть более "эффектно."

Автор: Domestic Cat 18.12.2004, 19:23
М
 
Nin, на форуме используется подсветка синтаксиса кода (теги [cоde=jаva][/code]). Такой код удобнее читать.

Автор: Oracle 18.12.2004, 19:26
Решил проблему то?

Автор: Nin 10.1.2005, 19:42
Привет всем,

Не подскажите как ... (3 точки) найти? тоесть теперь вместо "{" нужно наити "..."

Заранее благодарен,

Ильдар

Автор: Oracle 10.1.2005, 19:55
Код

import java.util.regex.*;

public class Test {
  public static void main(String args[]) {
      String str =  "[{ 1].\n{ 1].\n{ 1]]";
       Matcher m = Pattern.compile("//.").matcher(str);
/*
*Либо так:Matcher m = Pattern.compile("[.]").matcher(str);
*/
      while(m.find()) {
          for(int i = 0; i <= m.groupCount();i++){
              System.out.print(m.group(i));
          }

      }
  }
}

Автор: Nin 10.1.2005, 20:11
Работает, Спасибо
Добавлено @ 20:13
Работает, Спасибо smile
Добавлено @ 20:14
Работает, Спасибо
Добавлено @ 20:16
Бсё работает, ура!!!
спасибо

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