Вижу вот это при компиляции:
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();
}
}
Суть задания в том, что нужно написать класс с функциями, которые ищут в файле все ифы и выводит их кол-во ну и стринги считать, но там вроде нет ошибок. Буду благодарен за любую помощь, регулярные выражения все еще не полностью понимаю, потому могу тупить.
Вы в функции getIfCount() в строке
if (regex(l, "\\s[/]{2}\\s"))
перепутали местами параметры. На первом месте должно быть регулярное выражение, на втором - строка для поиска:
if (regex("\\s[/]{2}\\s", l))
В строке
counter += checkCounter(l, "\\s*if\\s*\\(.*\\)\\{?.*");
та же ошибка.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Хотелось бы примеры реализации на java, примеров реализации service locators полно, а вот ioc-containers не нашёлВсе ведет на готове реализации ioc, как правило...
ЗдравствуйтеПишу программу обработки отпечатка пальца на языке Java без OpenCV
Пишу игру пинг понг и столкнулся с проблемой движения ракеткиКак её решить?Вот мой вариант:
Я новичок, возможно, вопрос покажется глупымВзял готовый код из туториала по CRUD приложению