Как избавиться?

130
23 марта 2018, 12:35

Раньше вроде как всё даже работало.

       private static void PrintRock() {
                try {
                    File file = new File("rock.txt");
                    BufferedReader br = new BufferedReader(new FileReader(file));
                    File users = new File("users.txt");
                    BufferedReader sbr = new BufferedReader(new FileReader(users));
                    char[] text;
                    String numbers[][] = new String[55][7];
                    String[][] user = new String[55][4];
                    Date dateOne = null;
                    Date dateTwo = null;
                    String str;
                    int du = 2;
                    int l = 1;
                    SimpleDateFormat format = new SimpleDateFormat("dd:MM:yyyy");
                    while ((str = br.readLine()) != null) {
                        text = str.toCharArray();
                        int one = 0, two = 0, three = 0, four = 0, five = 0, six = 0, seven = 0;
                        for (int i = 0; i < text.length; i++) {
                            if (text[i] == ('*')) {
                                one = two;
                                two = three;
                                three = four;
                                four = five;
                                five = six;
                                six = seven;
                                seven = i;
                            }
                        }
                        numbers[l][0] = str.substring(one, two);
                        numbers[l][1] = str.substring(two, three).trim();
                        numbers[l][2] = str.substring(one, two).trim();
                        numbers[l][3] = str.substring(three, four).trim();
                        numbers[l][4] = str.substring(four, five).trim();
                        numbers[l][5] = str.substring(five, six).trim();
                        l++;
                    }
                    int u = 1;
                    while ((str = sbr.readLine()) != null) {
                        int one = 0, two = 0, three = 0, four = 0;
                        text = str.toCharArray();
                        for (int i = 0; i < text.length; i++) {
                            if (text[i] == ('*')) {
                                one = two;
                                two = three;
                                three = four;
                                four = i;
                            }
                        }
                        String ADRESS = str.substring(three, four).trim();
                        String FIO = str.substring(two, three).trim();
                        String ID = str.substring(one+3, two);
                        user[u][0] = ID;
                        user[u][1] = FIO;
                        user[u][2] = ADRESS;
                        System.out.println("\t" + user[u][0]);
                        u++;
                    }
                } catch (IOException e) {
                    e.getStackTrace();
                }
        }

Выводит как надо только с ошибкой.
71 строка , если в переменной one не прибавлять всё работает без ошибок .

Примера файла users.txt

*ID1 * Петров Андрей.С * Россия,Москва*

Ошибка

[![Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 3, end 0, length 0
    at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3116)
    at java.base/java.lang.String.substring(String.java:1885)
    at com.company.Main.PrintRock(Main.java:71)
    at com.company.Main.main(Main.java:204)][1]][1]
Answer 1

Совет по коду: разбейте эту функцию на подфункции, строчек по 5-7. По возможности используйте стандартные функции. Например ваша магия с:

int one = 0, two = 0, three = 0, four = 0;
text = str.toCharArray();
for (int i = 0; i < text.length; i++) {
     if (text[i] == ('*')) {
         one = two;
         two = three;
         three = four;
         four = i;
     }
}
String ADRESS = str.substring(three, four).trim();
String FIO = str.substring(two, three).trim();
String ID = str.substring(one+3, two);

легко превращается в:

String[] splited = str.trim().split("\\*");
String ADRESS = splited[2].trim();
String FIO = splited[1].trim();
String ID = splited[0].trim();

Так вероятность ошибок уменьшится. А у вас ошибка, судя по тому что length = 0 связана с тем что вы пытаетесь парсить пустую строку. Или уберите пустые строки из файла или добавьте условие, например if (text.length == 0) continue;

READ ALSO
Java, Сеть Петри [требует правки]

Java, Сеть Петри [требует правки]

Доброе времени суток! Нужна помощь в написании задания сеть Петри, благодарю заранее!

173
Caused by: org.postgresql.util.PSQLException: ERROR: relation &ldquo;public.n_user&rdquo; does not exist

Caused by: org.postgresql.util.PSQLException: ERROR: relation “public.n_user” does not exist

Возникает вышеназванная проблема

146
java вызов объекта из класса Controller

java вызов объекта из класса Controller

Вообщем я новичок, сразу начал учиться программировать с java + javafxПри нажатие кнопки (fxid:prepareRomEvent) , текст в TextField (fxid:nameRomText) должен записать...

149
В чем причина (java.io.IOException: No such file or directory)?

В чем причина (java.io.IOException: No such file or directory)?

Пытаюсь записать аудио-поток в файл на устройствоПрава на чтение/запись файлов в манифесте присутствуют

185