2013-04-23 78 views
0

我試圖與谷歌語音API的Java應用程式,以HashMap和一個方法來獲得SMS數據和convos返回一個完整的HTML頁面這樣解析HTML Java中

http://pastebin.com/tjZeHERa

我寫的一個SMSMessage類,它將HTML作爲String接收,並將解析標記之間的第一個消息數據,但它使用arrayList而不是Hashmap。

package gv; 
import java.util.*; 
import java.util.regex.*; 

public class SMSMessage { 

    protected String id; 
    protected String phoneNumber; 
    protected String displayNumber; 
    protected String message; 
    protected String startTime; 
    protected String displayStartDateTime; 
    protected boolean isRead; 
    protected String messageText; 

public SMSMessage(String x){ 

    parse(TruncateFirstMessage(x)); 
    parseresponse(x); 

} 
    public String TruncateFirstMessage(String xml){ 

     int firstbracket = xml.indexOf("{"); 
     //int secondbracket = xml.indexOf("{", firstbracket - 1); 
     int thirdbracket = xml.indexOf("}"); 
     int fourthbracket = xml.indexOf("}", thirdbracket - 1); 
     return xml.substring(firstbracket, fourthbracket); 
    } 
    private void parseresponse(String init){ 
     String trimmeds1 = init.substring(init.indexOf("<html><![CDATA[)")); 
     String trimmeds2 = init.substring(trimmeds1.indexOf(phoneNumber)); 
     Scanner s = new Scanner(trimmeds1); 




    } 

    private void parse(String init){ 

     Scanner s = new Scanner(init); 
     ArrayList<String> parsed = new ArrayList<String>(); 
     s.useDelimiter("[},:{]"); 
     String temp1 = ""; 
     int count = 0; 
      while (s.hasNext()){ 

       String n = s.next(); 
       if (!n.equals("")){ 
        count++; 
        String removequotes = n.replace("\"", ""); 


         parsed.add(removequotes); } 
       } 
      id = parsed.get(3); 
      phoneNumber = parsed.get(5); 
      displayNumber = parsed.get(7); 
      startTime = parsed.get(9); 
      displayStartDateTime = parsed.get(11) + ":" + parsed.get(12); 
      isRead = Boolean.parseBoolean(parsed.get(21)); 
      messageText = parsed.get(29); 

      } 

    public String toString(){ 

     return getClass().getSimpleName() + " [ " + "id = " + id + ", phoneNumber = " + phoneNumber + ", isRead = " + isRead + ", messageText = " + messageText + ", displayStartDateTime = " + displayStartDateTime + " ]"; 

    } 
} 

這將返回一個相當長的ArrayList中,像 [消息,0609dc2d10f365600fc48372fe3122a7ba3147fa,ID,0609dc2d10f365600fc48372fe3122a7ba3147fa,phoneNumber的,17654260681,displayNumber,(765)426-0681,開始時間,1365514638712,displayStartDateTime 4/9/13 9,37 AM,displayStartTime,9,37 AM,relativeStartTime,40分鐘前,note,,isRead,true,isSpam,false,isTrash,false,star,false,messageText,hi,labels,[inbox,sms,all ],類型,11,兒童,]

然後我得到一個特定的元素,並將其分配給一個字段。

我該如何用一個HashMap替換arrayList,其中的鍵將是「relativeStartTime」,並且該值將是下一個int?

回答

6

這很可愛。

首先,它不是HTML,而是XML。

其次,你想要的數據是JSON格式。

所以你有一個包含JSON數據的XML負載。奇妙。

你應該做的是去掉XML標籤,留下整個JSON負載。然後通過互聯網上可用的許多JSON解析器之一運行JSON負載。您也可以使用XML解析器來完成此任務,但它足夠簡單,您可能不需要學習其中的一個工具包。

JSON解析器既快速又易於使用,並且幾乎可以完全滿足您的需求。