You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java读取PHP文件后按Event拆分数据至数组并展示的实现方案

解决思路与实现代码

嘿,我来帮你搞定把PHP输出的事件内容拆分成单独条目,再展示到JTextField里的需求!咱们一步步来:

1. 优化内容读取与事件拆分逻辑

你原来的代码已经能读取到PHP的输出,但需要把这些内容按单个事件分组。观察输出格式,每个事件由4行组成(Event Number/Date/Time/Event),用正则表达式匹配事件块会比按行数拆分更灵活(万一输出格式有小变动也能适配)。

修改后的完整代码如下:

import java.net.*;
import java.io.*;
import java.util.regex.*;
import javax.swing.*;

public class AppDev {
    public static void main(String[] args) throws Exception {
        // 替换成你的实际PHP文件URL
        URL website = new URL("http://your-domain/MyWebsite.php");
        BufferedReader in = new BufferedReader(
                new InputStreamReader(website.openStream()));
        
        String inputLine;
        StringBuilder sb = new StringBuilder();
        // 先把所有内容读到StringBuilder,保留换行符方便后续匹配
        while ((inputLine = in.readLine()) != null) {
            sb.append(inputLine).append("\n");
        }
        in.close();

        // 正则匹配每个事件块:从"Event Number:"开始,到下一个事件开头或文本结尾结束
        Pattern pattern = Pattern.compile("Event Number:.*?(?=Event Number:|$)", Pattern.DOTALL);
        Matcher matcher = pattern.matcher(sb.toString());
        
        // 统计事件数量,初始化数组存储每个事件
        int eventCount = 0;
        while (matcher.find()) {
            eventCount++;
        }
        String[] events = new String[eventCount];
        
        // 重新匹配,将每个事件存入数组
        matcher.reset();
        int index = 0;
        while (matcher.find()) {
            events[index] = matcher.group().trim(); // 去除首尾多余换行和空格
            index++;
        }

        // 调用方法展示事件到JTextField
        displayEventsInTextFields(events);
    }

    // 单独处理UI展示的方法
    private static void displayEventsInTextFields(String[] events) {
        JFrame frame = new JFrame("Event List");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 垂直排列所有文本框
        frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
        
        for (String event : events) {
            JTextField textField = new JTextField(event);
            textField.setEditable(false); // 设置为不可编辑,仅用于展示
            textField.setMargin(new java.awt.Insets(5, 5, 5, 5)); // 增加内边距提升美观度
            frame.add(textField);
        }
        
        frame.pack();
        frame.setVisible(true);
    }
}

2. 代码关键点说明

  • 正则匹配:Pattern.DOTALL让.能匹配换行符,.*?(?=Event Number:|$)是正向预查,确保每个事件块精准截止到下一个事件的开头或文本末尾。
  • 数组存储:先统计事件数量再初始化数组,避免数组长度不匹配的问题。
  • UI展示:用垂直布局排列每个JTextField,设置不可编辑和内边距,让展示效果更友好。

3. 额外提示

如果你的PHP输出格式固定为每个事件4行,也可以用按行数拆分的方式(每4行合并成一个事件),但正则的方式对格式变动的兼容性更强。记得把代码里的URL替换成你实际的PHP文件地址哦!

内容的提问来源于stack exchange,提问作者Mohsenn_20

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:37:07