Получение незаконного государственного исключения в Regex - PullRequest
2 голосов
/ 12 мая 2019

Я пытаюсь удалить определенные строки в текстовом файле с помощью регулярных выражений, но я получаю исключение незаконного состояния. Я недавно пытался привыкнуть к регулярным выражениям и пытался использовать match.matches (); но это решение не сработало для меня. любой совет, что я делаю не так

try {
    BufferedReader br = new BufferedReader(new FileReader("TestFile.txt"));
    //System.out.println(br.toString());

    ArrayList<String> list = new ArrayList<String>();
    String line= br.readLine() ;

    while (br.readLine() != null ) {
        //System.out.println(line);
        //System.out.println("test1"); { 
        Pattern regex = Pattern.compile("[^\\s\"]+|\"[^\"]*\"");
        Matcher regexMatcher = regex.matcher(line);
        String match = regexMatcher.group();// here is where the illegalstateexception occurs
        match = removeLeadingChar(match, "\"");
        match = removeLeadingChar(match, "\"");
        list.add(match);    
    //  }

    //      br.close();
    System.out.println(br);

Исключение в потоке "main" java.lang.IllegalStateException: Совпадение не найдено в java.base / java.util.regex.Matcher.group (Неизвестный источник) в java.base / java.util.regex.Matcher.group (Неизвестный источник)

Ответы [ 2 ]

2 голосов
/ 12 мая 2019

Используйте метод Matcher.find(), чтобы увидеть, есть ли совпадение в шаблоне регулярного выражения.Отладка результатов метода regexMatcher.find() в IDE (например, IntelliJ)

try {
    BufferedReader br = new BufferedReader(new FileReader("TestFile.txt"));
    ArrayList<String> list = new ArrayList<>();

    String line;

    // Assign one line read from the file to a variable
    while ((line = br.readLine()) != null) {
        System.out.println(line);
        Pattern regex = Pattern.compile("[^\\s\"]+|\"[^\"]*\"");
        Matcher regexMatcher = regex.matcher(line);

        // Returns true if a match is found for the regular expression pattern.
        while (regexMatcher.find()) {
            String match = regexMatcher.group();
            match = removeLeadingChar(match, "\"");
            match = removeLeadingChar(match, "\"");
            list.add(match);
        }
    }

    // What is the purpose of this code?
    System.out.println(br);

    // If you want to output the string elements of the list
    System.out.println(list.toString());

    // must be closed after use.(to prevent memory leak)
    br.close();
} catch (IOException e) {
    // exception handling
    e.printStackTrace();
}
0 голосов
/ 18 мая 2019

Вы ошиблись в цикле while, поэтому строка становится пустой, попробуйте это:

try {
    BufferedReader br = new BufferedReader(new FileReader("TestFile.txt"));

    ArrayList<String> list = new ArrayList<String>();
    String line;     // <--- FIXED

    while ((line = br.readLine()) != null) { // <--- FIXED
        Pattern regex = Pattern.compile("[^\\s\"]+|\"[^\"]*\"");
        Matcher regexMatcher = regex.matcher(line);
        String match = regexMatcher.group();// here is where the illegalstateexception occurs
        match = removeLeadingChar(match, "\"");
        match = removeLeadingChar(match, "\"");
        list.add(match);    
    }

    br.close();

    System.out.println(list.toString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...