当前位置: 首页 > 知识库问答 >
问题:

我想要一个方法从Java中的URL参数中提取有时可能包含“&和=”的值

沈飞翼
2023-03-14
package com.bml.icbs.ws.param;    
import java.util.HashMap;

公共类RequestParameter{

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=ppp&param4=iiii&param5=kkkkk”

  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"));

}
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"));

}

它引发以下异常:线程“main”java.lang.StringIndexOutOfboundsException:String索引超出范围:在com.bml.icbs.ws.param.requestParameter处的java.lang.String.substring处的-1(String.java:1937)处的com.bml.icbs.ws.param.requestParameter.java:188)处的com.bml.icbs.ws.param.main.main(main.java:9)处的

共有1个答案

屠浩
2023-03-14

确保数组元素!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);
    }
 类似资料:
  • 公共类请求参数{ } 当我在URL为“param2=ffffhhh”的情况下测试上述方法时

  • 我正在使用Spring、REST和Hibernate创建一个web应用程序。在这里,我从数据库中提取记录使用唯一的用户名,这是来自URL。但问题是,如果我写的是简单字符串,那么它可以正常工作,但在username中,我写的是dot(.)则数据库中没有任何结果。 这是我的控制器 这是我的DAO类

  • 有一种方法可以创建这样的JPA查询 如果查询需要可选的搜索字段最常见的避免重复的方法是什么?对于单个参数,可以有两个命名查询,或者Criteria API可能允许避免这种情况(因为没有查询字符串),但还有其他方法吗?

  • 问题内容: 我正在编写小型且非常干燥的框架,该框架高度依赖元数据。我想知道是否有一种方法来获取方法参数名称,即给定一些方法 得到的字符串和。 我知道我可以注释参数,但是那不是很好。 问题答案: 我们为包含参数名称的String[]的方法创建了一个自定义注释。与必须注释每个单独的参数相比,此方法感觉易于管理。我们计划添加构建时检查,以确保带注释的参数名称的数量与参数的数量匹配,因为这是我们所需要的。

  • 问题内容: 在Java中,我有: 我想获取参数值(PAR,NYC)。 所以我创建了正则表达式: 返回假。正在返回。 我究竟做错了什么? 问题答案: 它不必是正则表达式。由于我认为没有标准的方法可以处理此问题,因此我使用的是从某处复制的内容(可能有一些修改): 因此,当您调用它时,将获得所有参数及其值。该方法处理多值参数,因此使用而不是,并且在您的情况下,您需要获取第一个列表元素。

  • 我有一个R代码,它从单个. nc4文件中提取每个月的每日值。我有49个netcdf文件。我想使用循环从所有这些文件中提取数据并将它们写入唯一的csv文件中。 我有一个文件的代码,但我需要多个文件的帮助。