2016-11-11 77 views
2

我有一个Java变量文本,我设法从日历blob文件中读取。它包含这样一个示例:从Java中的文本变量中提取信息块

“BEGIN:VCALENDAR PRODID: - // // Kusss DE VERSION:2.0方法:PUBLISH BEGIN:VEVENT UID:在-coursedate-1330089 DTSTAMP:20161110T124248Z DTSTART:20161005T114500Z DTEND:20161005T150000Z内容:移动 计算(367008/2016W)\,LVA-LeiterIn:教授简介:位置:S3 057 X-GWSHOW-AS:BUSY END:VEVENT END:VCALENDAR”

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

DTSTART信息:20161005T114500Z
DTEND:20161005T150000Z

我怎样才能实现与简单的Java代码? 非常感谢!

+1

请注意,jQuery与Java无关。我已经删除了你的标签 –

+0

看起来像一个日期信息,因为你设法提取整个文本只是通过正则表达式匹配提取DTstart和dtend和模式 –

+0

可能的重复[如何在Java中的字符串中找到整个单词](http://stackoverflow.com/questions/5091057/how-to-find-a-whole-word-in-a-string-in-java) –

回答

0

您需要先删除所有反斜杠才能使用。我建议你通过数组拆分每串和迭代,并期待如果刺痛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 
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 
0

使用模式正则表达式。

考虑你有你的文字,以及两个关键字,你想做的事:

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:'之后和下一个空格之前为你提供该String内的所有值。