2015-02-05 4 views
0
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&param1=oooo&param3=pppp&param4=iiii&param5=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&param1=oooo&param3=pppp&param4=iiii&param5=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=&param1=oooo=&&param3=pppp&param4=iiii&&yy=&param5=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)

+1

Это происходит потому, что вы не можете создать подстроку пустой строки, которая разбивается на «&». Чтобы лучше понять, распечатайте информацию в своем цикле после разбиения на «&», вы заметите, что у вас есть пустые строки несколько раз из-за повторения «&» в начале. – SomeJavaGuy

+0

@KevinEsche Спасибо, но у вас есть решение? – Aya

+0

просто игнорируйте пустую строку, используя continue, когда она пуста или ничего не делает, если она пуста – SomeJavaGuy

ответ

1

убедитесь, что элемент массива! Empy.

for (i=0;i<myArray.length;i++){ 
     if(myArray[i] == null || myArray[i].length()==0){ 
       continue; 
     } 
     key=myArray[i].substring(0,myArray[i].indexOf("=")); 
     value=myArray[i].substring(myArray[i].indexOf("=")+1); 
     this.hashmap.put(key,value); 
    } 
+0

@Aya я Язан не Кевин Эше :), во всяком случае ошибка была из-за '&&' поэтому вот почему вы получили 'yy =', если это помогло вам отметить PLZ как ответ – Yazan

+0

Благодарим вас за помощь, но идея в том, что мы принимаем случаи, когда значение параметра может содержать «&» или «=», поэтому я ищу метод для извлечения значений с помощью своего «&» или «=» вашего решения дал мне следующий ответ: HASHMAP {hhh =, param1 = oooo =, param2 = ffff, param3 = pppp, param4 = iiii, param5 = kkkkk, yy =} Но в любом случае большое спасибо :) он удалил исключение, которое происходило до @Yazan – Aya

+0

Да. Именно это намеренно, потому что мы принимаем случаи, когда значение параметра url может содержать «=» или «&», и мы должны включить их путь они находятся в извлеченном значении, мой метод работает только в том случае, если в значениях нет значений «=» или «&». Кстати, вы араб? возможно, мы могли бы лучше понять друг друга, если вы не возражаете дать мне адрес электронной почты ur. Спасибо :) @Yazan – Aya

 Смежные вопросы

  • Нет связанных вопросов^_^