在Java中从文本变量中提取信息块

在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

我有一个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
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,并且模式可能重复