#java #file #for-loop
#java #файл #for-цикл
Вопрос:
Я новичок в Java, и это может показаться действительно глупым, но! Предположим, что у вас есть этот текстовый файл где-то на вашем компьютере
The_txt.txt
Энтони
anthonyk@somewhere.com
01234567891
Расположение
Мария
maria@somewhere.com
1234561234
location2
Джордж
george@somewhere.com
1234512345
location3
Что я хочу сделать с этим текстом, так это то, что я предлагаю пользователю ввести номер телефона, поэтому, если, например, пользователь предоставит номер телефона Марии (1234561234), программа выведет
Мария
maria@somewhere.com
1234561234
location2
Мой фрагмент кода для этой задачи :
private static void Search_Contact_By_Phone(File file_location){
Scanner To_Be_String = new Scanner(System.in);
String To_Be_Searched = To_Be_String.nextLine();
System.out.println("n n n");
BufferedReader Search_Phone_reader;
try {
Search_Phone_reader = new BufferedReader(new FileReader (file_location));
String new_line = Search_Phone_reader.readLine();
while (new_line != null) {
if (To_Be_Searched.equals(new_line)){
for (int i=0;i<=3;i ){
System.out.println(new_line);
new_line = Search_Phone_reader.readLine();
}
break;
}
new_line = Search_Phone_reader.readLine();
}
Search_Phone_reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Заранее благодарю вас!!!
Комментарии:
1. Должна ли ваша программа выполнять поиск по номеру или по любой строке? Есть ли у вас какие-либо разделители между вашими пользователями?
2. У меня есть еще одна пустота для поиска по имени, но я это сделал. Моя проблема заключается в поиске по номеру телефона. Нет, у меня нет никаких разделителей, если он учитывается каждый раз, когда новый пользователь добавляется в текст, добавляемый программой _____________________ и n после каждого добавления
3. Вы должны следовать соглашениям об именовании Java: имена переменных и имена методов записываются в camelCase. Например,
To_Be_String
должно бытьtoBeString
.4. Да, это может быть delimeter. В любом случае, вы можете разделить своего пользователя с помощью регулярного выражения, подобного этому: имя — только буквы, почта-состоит из @, номер — только цифры, а местоположение — только буквы с номером в конце. Итак, когда вы вводите какую-либо строку в Scanner, вы должны выполнить поиск в своем первом delimeter ______n перед и начать добавлять полного пользователя в строку [] .
5. О, я полагаю, вы можете добавить в свою строку [] user каждую строку до delimeter, если вы ищете строку, найденную в массиве, вы показываете этого пользователя, если нет, вы удаляете []user и воссоздаете. Таким образом, на каждой итерации у вас будет 4 строки в массиве, и вы проверяете их по введенной строке
Ответ №1:
package com.mycompany.io;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class Main {
public static void main(String[] args) throws IOException {
// For a small file
Path path = Paths.get("The_txt.txt");
String toBeSearched = "1234512345";
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
// Better performance if i starts at 2 and i = 4
for (int i = 0; i < lines.size(); i ) {
if (lines.get(i).equals(toBeSearched)) {
System.out.println(lines.get(i - 2));
System.out.println(lines.get(i - 1));
System.out.println(lines.get(i));
System.out.println(lines.get(i 1));
}
}
// Else
try (BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
String line1;
while ((line1 = reader.readLine()) != null) {
String line2 = reader.readLine();
String line3 = reader.readLine();
if (line3.equals(toBeSearched)) {
// Found
System.out.println(line1);
System.out.println(line2);
System.out.println(line3);
System.out.println(reader.readLine());
break;
} else {
reader.readLine();
}
}
}
}
}
Комментарии:
1. Как вы можете сделать
lines.get(i-1)
, если вы не уверены, что он существует?2. Если формат файла хороший, он должен существовать из-за теста в «если». Мой код — это просто быстрый код, который можно изменить по вашему желанию. Я забыл закрыть поток, мне нужно уйти сейчас, но я скоро добавлю его.