2016-11-11 64 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內的所有值。