2013-04-23 74 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解析器既快速又易于使用,并且几乎可以完全满足您的需求。