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
相关产品推荐
相关产品推荐

