Для строк:
1017 macaroni 28.50 12
954 spagetti 31.15 10
413 lapsha 29.10 11
мой код работает, т.е., при присваивании args[0] определенного значения (1017 или 954 или 413) выводится вся строка, напр.: args[0]=954 будет выведено: 954 spagetti 31.15 10
Но не прохожу по третьему заданию. Сейчас заново перечитываю 8 уровень, решенные задачи, разбираю альтернативные решения (полез в обсуждения).
Подскажите пожалуйста, что может быть тут не так ?
Заранее очень благодарен!
package com.javarush.task.task18.task1822;
/*
Поиск данных внутри файла
*/
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution { // ASCII table 13=carriage return '\r', 10=new line feed '\n'.
public static void main(String[] args) {
args = new String[1];
args[0] = String.valueOf(954);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); //"D:\\mytasks\\newData1.txt";
// listForMap.addAll(Arrays.asList(parts));// сразу весь массив в список без цикла
// String textfromFile = new String(buffer);// загонем в строку буфер
// String[] parts = textfromFile.split(" "); // разбиваем строку по пробельно и загоняем в массив
// split("\s[^\s*\d*].*");// удалить все символы кроме ID
// split("^\\s*\\d+"); удалить ID
// .split("\\s*[^\\s*" +args[0] + "*].*"); удалить все кроме ID - проходит только по уникальным цифрам в ID
try {
FileInputStream inStream = new FileInputStream(reader.readLine());
byte[] buffer = new byte[inStream.available()];
inStream.read(buffer);
String text = new String(buffer);
// String [] result = text.split("(\\?:\\^\\s*)(\\s*954)");
Pattern pattern = Pattern.compile("^\\s*" + args[0], Pattern.MULTILINE);//need ^ //"(\\?:\\^\\s*)(\\s*" + args[0] +")"
Matcher matcher = pattern.matcher(text);
if (matcher.find()) { // пытается найти подстроку в отличии от matches(), которая ищет полное совпадение
// получаем индекс искомого ID
int w = text.indexOf(matcher.group());
// получаем индекс символа возврата каретки (13 ASCII или все же "перенос строки" 10 ASCII?
// 13 читается в строке первым.) - читай от начала ID до конца строки.
int e = text.indexOf(10, w);
// System.out.println(e);
System.out.print(text.substring(w, e));
} else System.out.print("I found nothing!");
reader.close();
inStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// " если ID совпадает с ARG[0] надо вывести на консоль всю информацию о товаре, то есть всю строку целиком"
/*
D:\\mytasks\\newData1.txt
*/