Почему регулярка не срабатывает в java?

Прописал класс в которой с файла читаются строки и в зависимости от того подходит строка под регулярку, добавляет в ArrayList, но он постоянно оказывается пустой, перепроверял без регулярки, строки с файла читаются нормально, проверил саму регулярку на другом сайте, срабатывает, подскажите в чем проблема?

StrProcess
import java.io.File;
import java.util.regex.Pattern;
import java.util.Scanner;
import java.util.ArrayList;
import java.io.FileNotFoundException;

public class StrProcess
{
	ArrayList<String> Str = new ArrayList<String>();

	StrProcess(String filename, String regex)
	{
		try
		{
		File query = new File(filename);
		Scanner reader = new Scanner(query);
		while(reader.hasNextLine())
		{
			if(Pattern.matches(regex, reader.nextLine()));
				Str.add(reader.nextLine())
		}
		}
		catch(FileNotFoundException e)
		{
			System.out.println("File Not Found");
		}

	}

	private void Sort()
	{

	}

	public ArrayList<String> GetAll()
	{
		return(Str);
	}
}

Main
import java.util.ArrayList;

public class Main
{
	public static void main(String[] args)
	{
		String query1 = "query1.txt";
		String query2 = "query2.txt";
		String query4 = "query4.txt";

		String regex1 = "^..69*"; // строка начинается с кода который заканчивается на 69
		String regex2 = "SPORT"; // строка в которой содержится SPORT
		String regex4 = ".*1[0-9]{3}$"; //строка которая заканчивается на число от 1000 до 1999

		StrProcess condition1 = new StrProcess(query1, regex1);
		StrProcess condition2 = new StrProcess(query2, regex2);
		StrProcess condition3 = new StrProcess(query4, regex4);

		ArrayList<String> result1 = condition1.GetAll();
		ArrayList<String> result2 = condition2.GetAll();
		ArrayList<String> result3 = condition3.GetAll();

		System.out.println("Result 1(" + regex1 + "):");
		System.out.println(result1);
		System.out.println("Result 2(" + regex2 + "):");
		System.out.println(result2);
		System.out.println("Result 3(" + regex4 + "):");
		System.out.println(result3);

	}
}
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
Вот тут ошибка;
if(Pattern.matches(regex, reader.nextLine()));
        Str.add(reader.nextLine())

reader.nextLine() читает строку и переходит на следующую.
Т.е. вы читаете строку, анализируете ее, а добавляете уже следующюю (а там, видимо, ничего нет)

Нужно создать в цикле переименую в которую сохраняется строка и действия все производить уже с этой переменной.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы