搜尋此網誌

2013年8月19日 星期一

【Java】取得URL GET的參數值

很直覺得寫下來,先切?再切&

void getURLvalue(string url){   
if (url.indexOf("?") != -1) {
temp = url.split("?")[1];  //這行有錯

tempArray = temp.split("&");

for (String i : tempArray) {
String[] pair = i.split("=");
if (pair[0] == "id")  // pair[0] = key ; pair[1] = value

...
}

   }
}


但compile說第二行?有錯
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0
?
^
原來問題出現在
temp = url.split("?")[1];------->temp = url.split("//|?")[2];
就可以順利執行了

結果不保證每次都是想要的。另外找尋其他方法。
String java.net.URL.getQuery()恰好符合需求,就不用特別去切?,結果不一定正確

修改後的版本
void getURLvalue(string url){  
  URL tempUrl = new URI(url).toURL();

  String[] queryArray = tempUrl.getQuery().split("&");
  for (String i : queryArray) {
  String[] pair = i.split("=");

  if (pair[0].equals("v")) { // pair[0] = key ; pair[1] = value
  }
}

}

其中須注意的地方,字串比對要用.equals。

其他功能

                System.out.println("getAuthority:" + url.getAuthority());
System.out.println("getDefaultPort:" + url.getDefaultPort());
System.out.println("getFile:" + url.getFile());
System.out.println("getHost:" + url.getHost());
System.out.println("getPath:" + url.getPath());
System.out.println("getPort:" + url.getPort());
System.out.println("getProtocol:" + url.getProtocol());
System.out.println("getQuery:" + url.getQuery());
System.out.println("getRef:" + url.getRef());
System.out.println("getUserInfo:" + url.getUserInfo());

沒有留言: