在Java中从文本变量中提取信息块
我有一个Java变量文本,我设法从日历blob文件中读取它。它包含如下示例: “开始:VCALENDAR PRODID:-//Kusss//DE版本:2.0方法:发布 开始:VEVENT UID:at-coursedate-1330089 DTSTAMP:20161110T124248Z DTSTART:20161005T114500Z DTEND:20161005T150000Z摘要:移动 计算(367008/2016W)\,Lva LeiterIn:教授描述:位置:S3 057 X-GWSHOW-AS:忙端:VEVENT端:VCALENDAR“ 我想从文本中提取特定的块并将其存储在数组中。我的兴趣只在于了解 DTSTART:20161005T114500Z在Java中从文本变量中提取信息块,java,Java,我有一个Java变量文本,我设法从日历blob文件中读取它。它包含如下示例: “开始:VCALENDAR PRODID:-//Kusss//DE版本:2.0方法:发布 开始:VEVENT UID:at-coursedate-1330089 DTSTAMP:20161110T124248Z DTSTART:20161005T114500Z DTEND:20161005T150000Z摘要:移动 计算(367008/2016W)\,Lva LeiterIn:教授描述:位置:S3 057 X-GWSH
DTEND:20161005T150000Z 如何用简单的JAVA代码实现这一点?
非常感谢 您需要删除所有反斜杠才能生效。我建议您在每个位置拆分字符串并遍历数组,然后查看sting
startsWith(DTSTART)
或startsWith(DTEND)
是否可以将它们存储在某个位置
String s=new String("BEGIN:VCALENDAR PRODID:-//Kusss//DE VERSION:2.0 METHOD:PUBLISH BEGIN:VEVENT UID:at-coursedate-1330089 DTSTAMP:20161110T124248Z DTSTART:20161005T114500Z DTEND:20161005T150000Z SUMMARY:Mobile Computing (367008/2016W), Lva-LeiterIn: prof DESCRIPTION: LOCATION:S3 057 X-GWSHOW-AS:BUSY END:VEVENT END:VCALENDAR");
String[] test=s.split(" ");
for(String str:test){
if(str.startsWith("DTSTART")||str.startsWith("DTEND")){
System.out.println(str);
}
}
产生:
DTSTART:20161005T114500Z
DTEND:20161005T150000Z
或者你可以这样做:
String a = "BEGIN:VCALENDAR PRODID:-//Kusss//DE VERSION:2.0 METHOD:PUBLISH BEGIN:VEVENT "
+ "UID:at-coursedate-1330089 DTSTAMP:20161110T124248Z DTSTART:20161005T114500Z "
+ "DTEND:20161005T150000Z SUMMARY:Mobile Computing (367008/2016W)\\, Lva-LeiterIn: "
+ "prof DESCRIPTION: LOCATION:S3 057 X-GWSHOW-AS:BUSY END:VEVENT END:VCALENDAR";
String start = a.substring(a.lastIndexOf("DTSTART"), a.lastIndexOf("DTEND")-1);
String end = a.substring(a.lastIndexOf("DTEND"), a.lastIndexOf("SUMMARY")-1);
System.out.println(start);
System.out.println(end);
将产生:
DTSTART:20161005T114500Z
DTEND:20161005T150000Z
使用模式regex
假设你有你的文本和两个关键词,你想做:
String s = "BEGIN:VCALENDAR PRODID:-//Kusss//DE VERSION:2.0 METHOD:PUBLISH BEGIN:VEVENT UID:at-coursedate-1330089 DTSTAMP:20161110T124248Z DTSTART:20161005T114500Z DTEND:20161005T150000Z SUMMARY:Mobile Computing (367008/2016W)\\, Lva-LeiterIn: prof DESCRIPTION: LOCATION:S3 057 X-GWSHOW-AS:BUSY END:VEVENT END:VCALENDAR";
findValue(s, "DTSTART");
findValue(s, "DTEND");
将文本和所需密钥发送到以下方法:
private static String findValue(String text, String keyword) {
Pattern p = Pattern.compile(keyword+ ":([^\\s]+)"); // the regex to be found
Matcher m = p.matcher(text);
if (m.find()) { // if found
return m.group().replace(dtStartOrEnd + ":", ""); // return found, except 'DTSTART:' / 'DTEND:'
}
return null; // Not found
}
这个方法可以在“key:”之后和下一个空格之前为您提供该字符串中的所有值。请注意,jQuery与Java无关。我已经为你删除了这个标签,它看起来像是一个日期信息,因为你成功地提取了整个文本,只是通过正则表达式匹配器提取了DTstart和dtend,并且模式可能重复