я создал класс сообщения (у сообщения есть тело, отправитель, адрес все строки) у меня есть текстовый файл, который выглядит так: От: отправитель Кому: адрес тело сообщения
(поля разделяются новой строкой)
мне нужно создать массив сообщений из этого текстового файла
как лучше всего это сделать? (я пытаюсь сделать это с помощью split, но возникли некоторые проблемы)




Если я четко понимаю вашу проблему, у вас есть несколько сообщений в одном файле, а сообщение состоит из 3 строк:
Затем вы можете сделать это так:
public List<Message> getMessages(String fileName) throws IOException {
List<Message> messages = new ArrayList<>();
try {
String from;
String to;
String body;
Message message;
List<String> lines = Files.readAllLines(Paths.get(fileName));
for (int i = 0; i < lines.size(); i += 3) {
from = lines.get(i);
to = lines.get(i + 1);
body = lines.get(i + 2);
message = new Message(from, to, body);
messages.add(message);
}
} catch (IOException e) {
throw e;
}
return messages;
}
Здесь вы просматриваете свой файл сообщений, которому вы передаете имя файла в параметрах, и увеличиваете счетчик строк до 3 на каждой итерации, так что вы можете просто получить все данные, которые вам нужны (из, в и тело).
Если этого образца кода недостаточно, вы можете использовать split () для from, to и body только для извлечения значения:
String fromValue = from.split(": ")[1]
NB: Используемый здесь класс сообщений выглядит следующим образом:
public class Message {
private String from;
private String to;
private String body;
public Message(String from, String to, String body) {
this.from = from;
this.to = to;
this.body = body;
}
}
Если функция разделения не работает нормально, вы можете использовать StringTokenizer. Класс строкового токенизатора позволяет приложению разбивать строку на токены. Набор разделителей (символов, разделяющих токены) может быть указан либо во время создания, либо для каждого токена. Ниже вы можете найти пример:
String message = "From: sender\nTo: adress message\nbody";
System.out.println(message);
StringTokenizer st = new StringTokenizer(message, "\n");
while(st.hasMoreTokens()) {
System.out.print("[" + st.nextToken() + "]");
}
Используйте метод BufferedFileReader readLine ()