Раньше вроде как всё даже работало.
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]
Совет по коду: разбейте эту функцию на подфункции, строчек по 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;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Доброе времени суток! Нужна помощь в написании задания сеть Петри, благодарю заранее!
Возникает вышеназванная проблема
Вообщем я новичок, сразу начал учиться программировать с java + javafxПри нажатие кнопки (fxid:prepareRomEvent) , текст в TextField (fxid:nameRomText) должен записать...
Пытаюсь записать аудио-поток в файл на устройствоПрава на чтение/запись файлов в манифесте присутствуют