从Java

时间:2016-11-11 10:30:18

标签: java

我在Java中有一个可变文本,我设法从日历blob文件中读取。它包含这样的样本:

  

" BEGIN:VCALENDAR PRODID: - // Kusss // DE VERSION:2.0方法:发布   开始:VEVENT UID:at-coursedate-1330089 DTSTAMP:20161110T124248Z   DTSTART:20161005T114500Z DTEND:20161005T150000Z摘要:手机   计算(367008 / 2016W)\,Lva-LeiterIn:教授说明:位置:S3   057 X-GWSHOW-AS:忙碌结束:结局:VCALENDAR"

我想从文本中提取特定块并将其存储在数组中。我的兴趣只是获取

的信息

DTSTART :20161005T114500Z
DTEND :20161005T150000Z

如何使用简单的JAVA代码实现这一目标? 非常感谢!

3 个答案:

答案 0 :(得分:0)

在此工作之前,您需要删除所有反斜杠。我建议你将每个字符串拆分,然后迭代整个数组,然后查看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

答案 1 :(得分:0)

或者你可以这样做:

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

答案 2 :(得分:0)

使用Pattern 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
}

此方法已准备好在'键之后为该字符串中的所有值提供:'在下一个空格之前。