package com.bml.icbs.ws.param;
import java.util.HashMap;
общественного класса RequestParameter {Я хочу, чтобы метод для извлечения значений, которые могут иногда содержать "& и =" из параметров URL в Java
private String param;
private HashMap<String, String> hashmap;
public RequestParameter(String param){
this.param=param;
this.hashmap = new HashMap<String, String>();
Integer i;
String key,value;
String myArray[] = this.param.split("&");
for (i=0;i<myArray.length;i++){
key=myArray[i].substring(0,myArray[i].indexOf("="));
value=myArray[i].substring(myArray[i].indexOf("=")+1);
this.hashmap.put(key,value);
}
}
public String getParameterValue(String key){
return this.hashmap.get(key);
}
public String getParam() {
return param;
}
public void setParam(String param) {
this.param = param;
}
public HashMap<String, String> getHashmap() {
return hashmap;
}
public void setHashmap(HashMap<String, String> hashmap) {
this.hashmap = hashmap;
}
}
Когда я Протестируйте выше метод в случае, если URL является «param2 = ffffhhh & param1 = oooo & param3 = pppp & param4 = iiii & param5 = kkkkk"
The result is: SIZE 5 URL param2=ffffhhh¶m1=oooo¶m3=pppp¶m4=iiii¶m5=kkkkk HASHMAP {param1=oooo, param2=ffffhhh, param3=pppp, param4=iiii, param5=kkkkk} PARAM1 = oooo
, который является правильным
public static void main(String[] args) {
RequestParameter reqParam = new RequestParameter("param2=ffffhhh¶m1=oooo¶m3=pppp¶m4=iiii¶m5=kkkkk");
System.out.println("SIZE " + reqParam.getHashmap().size());
System.out.println("URL " + reqParam.getParam());
System.out.println("HASHMAP " + reqParam.getHashmap());
System.out.println("PARAM1 = " reqParam.getParameterValue("param1"));
}
, но в случае, если я передать URL в следующий: «param2 = FFFF & & & HHH = & param1 = оооо = & & param3 = pppp & param4 = iiii & & уу = & param5 = kkkkk»
public static void main(String[] args) {
RequestParameter reqParam = new RequestParameter("param2=ffff&&&hhh=¶m1=oooo=&¶m3=pppp¶m4=iiii&&yy=¶m5=kkkkk");
System.out.println("SIZE " + reqParam.getHashmap().size());
System.out.println("URL " + reqParam.getParam());
System.out.println("HASHMAP " + reqParam.getHashmap());
System.out.println("PARAM1 = " reqParam.getParameterValue("param1"));
}
он выдает следующее исключение: Исключение в потоке "основной" java.lang.StringIndexOutOfBoundsException: индекс Строка вне диапазона: - 1 at java.lang.String.substring (String.java:1937) at com.bml.icbs.ws.param.RequestParameter. (RequestParameter.java:188) at com.bml.icbs.ws.param. main.main (main.java:9)
Это происходит потому, что вы не можете создать подстроку пустой строки, которая разбивается на «&». Чтобы лучше понять, распечатайте информацию в своем цикле после разбиения на «&», вы заметите, что у вас есть пустые строки несколько раз из-за повторения «&» в начале. – SomeJavaGuy
@KevinEsche Спасибо, но у вас есть решение? – Aya
просто игнорируйте пустую строку, используя continue, когда она пуста или ничего не делает, если она пуста – SomeJavaGuy