java - 解析字符串以获取分组参数

标签 java string javaparser

我的字符串看起来像这样

http://localhost:8080/HospitalServer/files/file?id=34&firstname=alex&lastname=ozouf&age=33&firstname=kevin&lastname=gerfild&age=27

我使用这段代码来解析参数

final Map<String, List<String>> query_pairs = new LinkedHashMap<String, List<String>>();
          final String[] pairs = query.split("&");
          for (String pair : pairs) {
            final int idx = pair.indexOf("=");
            final String key = idx > 0 ? URLDecoder.decode(pair.substring(0, idx), "UTF-8") : pair;
            if (!query_pairs.containsKey(key)) {
              query_pairs.put(key, new LinkedList<String>());
            }
            final String value = idx > 0 && pair.length() > idx + 1 ? URLDecoder.decode(pair.substring(idx + 1), "UTF-8") : null;
            query_pairs.get(key).add(value);

          }
          System.out.println(query_pairs);

结果是

{id=[34], firstname=[alex, kevin], lastname=[ozouf, gerfild], age=[33, 27]}

结果还不错,但我想按人对参数进行分组。

{id=[34], 1=[alex,ozouf,33 ], 2=[kevin, gerfild,27]}

我可以根据之前的结果创建它,但我感觉这项工作完成了两次。你觉得我该怎么办?

最佳答案

以下是不使用任何库即可完成此操作的方法:

import java.util.Map;
import java.util.HashMap;

public class MyUrlParser {

  private static final String SEPARATOR = ",";

  public static void main(String[] args) {
    final String URL = "http://localhost:8080/HospitalServer/files/file?id=34&firstname=alex&lastname=ozouf&age=33&firstname=kevin&lastname=gerfild&age=27";

    MyUrlParser mup = new MyUrlParser();
    try {
      Map<String, String> parsed = mup.parse(URL);
      System.out.println(parsed);
    } catch (Exception e) {
      System.err.println(e.getMessage());
    }
  }

  public Map<String, String> parse(String url) throws Exception {
    Map<String, String> retMap = new HashMap<>();
    int queryStringPos = url.indexOf("?");
    if (-1 == queryStringPos) {
      throw new Exception("Invalid URL");
    }
    String queryString = url.substring(queryStringPos + 1);
    String[] parameters = queryString.split("&");
    if (parameters.length > 0) {
      retMap.put("id", parameters[0]);
      int personCounter = 0;
      for (int minSize = 4; minSize <= parameters.length; minSize += 3) {
         StringBuilder person = new StringBuilder();
         person.append(parameters[minSize-3]);
         person.append(SEPARATOR);
         person.append(parameters[minSize-2]);
         person.append(SEPARATOR);
         person.append(parameters[minSize-1]);
         personCounter++;
         retMap.put("person" + personCounter, person.toString());
      }
    }
    return retMap;
  }
}

关于java - 解析字符串以获取分组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36869789/

相关文章:

java - Nimbus Look And Feel 调整菜单栏的颜色

coldfusion - 将空字符串转换为整数

java - 为什么 Java 中的大多数字符串操作都基于正则表达式?

java - 为什么 http ://localhost:8080 available while 127. 0.0.1 不行? (MyEclipse+Tomcat上的JSP)

java - 通过组合嵌套列表和复制单个值来扩展列表

java - 如何使用JavaParser遍历一些Java源代码的AST(抽象语法树)的所有节点?

Javaparser方法编辑

java - 在 inria Spoon 中构建模型的更快方法

java - spring data 通过嵌套列表对象查找

java - 我可以向 Java 中的 String 类添加新方法吗?