2013-05-01 185 views
-2

我得到一个包含多个双引号的值的请求标头,我如何解析它在我的java代码中?解析http请求标头

这里头的样子

PP-组: “管理员”, “超级用户”, “查看”, “编辑”

+0

问题是关系到基本的Java,而不是任何网络相关的东西。 – Lion 2013-05-01 21:02:27

回答

0

将字符串拆分为split()StringTokenizer,然后关闭引号。

String header=request.getHeader("pp-groups"); 
for (String val : header.replace("\"", "").split(",")) System.out.println(val); 

犯规支持内嵌引号虽然,不知道这是否是必需的

+1

“StringTokenizer是一个保留的兼容性遗留类,虽然在新代码中不鼓励使用它。建议任何寻求该功能的人都使用String或java.util.regex包的拆分方法。”所以,不要建议字符串标记器。 – brunoais 2013-05-01 20:58:22

+0

split - 推荐的方法 - “StringTokenizer是一个保留的兼容性遗留类,尽管在新代码中不鼓励使用它。建议任何寻求该功能的人都使用String或java.util.regex包的split方法代替。” – 2013-05-01 20:58:32

+0

@brunoais哈哈,几乎在同一时间:-) – 2013-05-01 20:59:00

0

我会建议寻找到splitmethod

+1

这对于引用的字符串是不够的。 – SLaks 2013-05-01 20:56:07

+0

实际上,你只需要对你如何处理它很聪明。正则表达式匹配绝对是这里走的路。 – 2013-05-01 20:59:27

1

为什么不分割和修剪?

public static void main(String...arg) { 
    List<String> vals = new ArrayList<String>(); 
    String header = "\"Administrator\",\"\"Super\" User\",,\"\",view,\"Edit\""; 
    for(String val : header.split(",")) { 
    if(val.length() > 0) { 
     if(val.charAt(0) == '\"' && val.charAt(val.length()-1) == '\"') { 
     if(val.length() > 2) { //not just a pair of quotes 
      vals.add(val.substring(1, val.length()-1)); 
     } 
     } else { 
     vals.add(val); 
     } 
    } 
    } 
    System.out.println(vals); 
} 

输出:

[Administrator, "Super" User, view, Edit] 
+0

您可以通过查看'.chartAt(0)'和'.chartAt(val.length())' – 2013-05-01 21:07:06

+0

来添加错误检查在那里,更新来处理值不是引号与 – 2013-05-01 21:09:55

+0

的值混合并且 – 2013-05-01 21:11:12