Java печатает определенные данные из файла

У меня есть текстовый файл. Там есть правила, и я должен получить все, что в скобках, в отдельном файле. Но я даже не вижу его в консоли.

Я уже пробовал много методов, но всегда получаю ошибки (обведенный код).

С решением прямо сейчас оно просто ничего не показывает в консоли. Кто-нибудь знает, почему?

Скобки всегда находятся в той же строке, что и «InputParameters», я пробовал что-то с этим в конце кода.

Описанные решения не будут работать. Может быть, у кого-то есть идея?

с этим кодом ниже я получаю следующую ошибку:

Исключение в потоке «основной» java.lang.StringIndexOutOfBoundsException: индекс строки вне диапазона: -1 в java.lang.String.substring(неизвестный источник) в blabla.execute.main(execute.java:17)

вот некоторый контент из txt файла:

dialect  "mvel"   
rule "xxx"  
    when
        InputParameters (xy <= 1.124214, xyz <= 4.214214, abc <= 1.12421, khg <= 1.21421)   
    then


Ty

Вот код:

public class execute {

    public static void main(String[] args) throws IOException {
        BufferedReader br = null;


        try {
            br = new BufferedReader(new FileReader("C:..."));

            java.lang.String line;
            line = br.readLine();
            while ((line = br.readLine()) != null) {
                System.out.println(line.substring(line.indexOf(("\\("), line.indexOf(("\\)")))));

            }
        } catch (FileNotFoundException e1) {

            e1.printStackTrace();

        } finally {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

person Phillip S    schedule 11.07.2018    source источник
comment
Пожалуйста, удалите разделы кода, которые вы не используете. Пожалуйста, также покажите нам небольшой образец ввода, который вы хотите прочитать.   -  person    schedule 11.07.2018
comment
Было бы неплохо увидеть текстовый файл вместе с минимальным примером кода.   -  person nicomp    schedule 11.07.2018
comment
@PhillipS Я только что изменил условие while и .... -- добавьте эту информацию в свой вопрос.   -  person nicomp    schedule 11.07.2018
comment
Пожалуйста, не помещайте код в комментарии, отредактируйте свой вопрос.   -  person    schedule 11.07.2018
comment
отредактировал мой вопрос с новым кодом, ошибкой и некоторым содержимым из txt файла   -  person Phillip S    schedule 11.07.2018


Ответы (2)


Исключение в потоке «основной» java.lang.StringIndexOutOfBoundsException: индекс строки вне диапазона: -1 в java.lang.String.substring(неизвестный источник) в blabla.execute.main(execute.java:17)

Это исключение означает, что -1 был передан методу substring(). Этот -1 создается indexOf(), когда он ничего не находит.

Все ваши строки содержат скобки? Следует проверить, присутствуют ли скобки в строке.

 while ((line = br.readLine()) != null) {
        if(line.indexOf(("\\(") != -1 && line.indexOf(("\\)") != -1) {
            System.out.println(line.substring(line.indexOf(("\\("), line.indexOf(("\\)")))));
        }
    }
person FazoM    schedule 11.07.2018

проблема в том, что если вы хотите получить индекс строки (indexOf()) в строке, в которой искомая строка не существует, indexOf возвращает -1, и если подстрока метода получает аргумент -1, то она генерирует исключение StringIndexOutOfBoundsException. Я предлагаю сначала проверить, содержит ли строка «InputParameter», поскольку вы сказали, что это слово всегда находится в одной строке, а затем вы получаете строку внутри скобок, используя методы subtring и indexOf.

этот работает для меня

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileRead {
    public static void main(String[] args) {
        final String filename = "$insertPathToFile$"; 
        BufferedReader br = null;

        try {
            br = new BufferedReader(new FileReader(filename));
            String line = br.readLine();
            while(line != null){
               if (line.contains("InputParameters")) {
                   System.out.println(line.substring(line.indexOf("(")+1, line.indexOf(")")));
               } // end if
               line = br.readLine();
            } // end while
        } catch (Exception e) {
            // TODO: handle exception
        } finally {
            try {
                br.close();
            } catch (IOException e) {}
        } // end try
    } // end main
} // end class
person Aponax    schedule 11.07.2018
comment
Спасибо за ваши ответы. Это помогло мне. Но я пока не буду закрывать этот вопрос, потому что я не могу проверить это прямо сейчас. - person Phillip S; 11.07.2018