有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVA从文件中拆分文本并转换为消息

我创建了一个消息类(消息包含body、sender、address所有字符串) 我有一个如下所示的文本文件: 发件人:发件人 致:地址 消息体

(字段用新行表示)

我需要从该文本文件创建一个消息数组

最好的方法是什么?(我尝试使用split进行此操作,但遇到了一些问题)


共 (2) 个答案

  1. # 1 楼答案

    如果分割函数不能正常工作,可以使用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() + "]");
    }
    
  2. # 2 楼答案

    如果我清楚地了解您的问题,您在一个文件中有多条消息,一条消息有三行:

    • 身体

    然后您可以这样做:

    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,这样您就可以简单地获得所需的所有数据(从、到和正文)

    如果此代码示例还不够,则可以在from、to和body上使用split()仅提取值:

    String fromValue = from.split(": ")[1]
    

    注意:此处使用的消息类如下所示:

    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;
        }
    }