RegEx ошибка при компиляции Illegal repetition

378
13 марта 2017, 09:14

Вижу вот это при компиляции:

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition
{ 
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.closure(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at zad2.Finder.regex(Finder.java:75)
at zad2.Finder.getIfCount(Finder.java:35)
at zad2.Main.main(Main.java:15)

Есть 2 класса, вот код:

Main.java

package zad2;

public class Main {
  public static void main(String ... args) throws Exception  {
    String fname  = "C:/Users/User/Desktop/Test.java";
    Finder finder = new Finder(fname);
    int nif = finder.getIfCount();
    int nwar = finder.getStringCount("variant");
    System.out.println("Number of the if statements: " + nif);
    System.out.println("Number of variant strings: " + nwar);
  }
}

Finder.java

package zad2;
import java.io.*;
import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.nio.file.Paths;
public class Finder {
    String p;
    public Finder(String fname) {
    p = fname;
}
public int getIfCount() {
    int counter = 0;
    Scanner scan;
    try {
        scan = new Scanner(Paths.get(p), "UTF-8");
    } catch (IOException e) {
        System.out.println(e.toString());
        return 0;
    }
    while (scan.hasNextLine()) {
        String l = scan.nextLine();
        if (regex(l, "\\s[/]{2}\\s"))
            continue;
        counter += checkCounter(l, "\\s*if\\s*\\(.*\\)\\{?.*");
    }
    scan.close();
    return counter;
}
public int getStringCount(String string) {
    int counter = 0;
    Scanner scan;
    try {
        scan = new Scanner(Paths.get(p), "UTF-8");
    } catch (IOException e) {
        System.out.println(e.toString());
        return 0;
    }
    while (scan.hasNextLine()) {
        String l = scan.nextLine();
        counter += checkCounter(l, string);
    }
    scan.close();
    return counter;
}
public int checkCounter(String re, String s) {
    int counter = 0;
    Pattern pattern = Pattern.compile(re);
    Matcher matcher = pattern.matcher(s);
    while (matcher.find()) {
        counter++;
    }
    return counter;
}
public boolean regex(String re, String s) {
    Pattern pattern = Pattern.compile(re);
    Matcher matcher = pattern.matcher(s);
    return matcher.matches();
}

}

Суть задания в том, что нужно написать класс с функциями, которые ищут в файле все ифы и выводит их кол-во ну и стринги считать, но там вроде нет ошибок. Буду благодарен за любую помощь, регулярные выражения все еще не полностью понимаю, потому могу тупить.

Answer 1

Вы в функции getIfCount() в строке

if (regex(l, "\\s[/]{2}\\s"))

перепутали местами параметры. На первом месте должно быть регулярное выражение, на втором - строка для поиска:

if (regex("\\s[/]{2}\\s", l))

В строке

counter += checkCounter(l, "\\s*if\\s*\\(.*\\)\\{?.*");

та же ошибка.

READ ALSO
В чем отличие service locator от ioc-container?

В чем отличие service locator от ioc-container?

Хотелось бы примеры реализации на java, примеров реализации service locators полно, а вот ioc-containers не нашёлВсе ведет на готове реализации ioc, как правило...

323
Обьединить результаты обработки фильтром Собеля на Java без OpenCV

Обьединить результаты обработки фильтром Собеля на Java без OpenCV

ЗдравствуйтеПишу программу обработки отпечатка пальца на языке Java без OpenCV

266
Перемещение фигуры по нажатию клавиши

Перемещение фигуры по нажатию клавиши

Пишу игру пинг понг и столкнулся с проблемой движения ракеткиКак её решить?Вот мой вариант:

325
JSP не перенаправлят на другое JSP

JSP не перенаправлят на другое JSP

Я новичок, возможно, вопрос покажется глупымВзял готовый код из туториала по CRUD приложению

326