我的字符串格式为
<!-- accountId="123" activity="add" request="add user" -->
参数数量和顺序是随机的。
我需要获取请求的值,我需要解析字符串中的添加用户文本。在Java中执行此操作的最佳方法是什么?
答案 0 :(得分:3)
听起来像是一个学校项目而不是解决问题我只会指出你正确的方向:查看String Tokenizer Class
答案 1 :(得分:1)
我的解决方案是使用暴力破解并根据需要拆分字符串,并根据它更新HashMap
。这可能是最简单的解决方案。
另一种方法是使用String Tokenizer,正如Kyle建议的那样。
第三种方法是替换开始和结束标记,使其形成有效的XML,然后将其解析为XML。是的,我知道这个特别就像是用大炮射击一只苍蝇。但有时可能需要它,这是一个选项;)
答案 2 :(得分:1)
您可以使用正则表达式解析它,如下所示:
public static Map<String, String> parse(String s) {
Map<String, String> map = new HashMap<String, String>();
Pattern p = Pattern.compile("(\\w+)\\s*=\\s*\"(.*?)\"");
Matcher m = p.matcher(s);
while (m.find()) {
map.put(m.group(1), m.group(2));
}
return map;
}
使用示例:
String s = "<!-- accountId=\"123\" activity=\"add\" request=\"add user\" -->";
Map<String, String> m = parse(s);
// m => {accountId=123, request=add user, activity=add}
m.get("request"); // => "add user"
如果您需要保留属性的顺序,则可以使用LinkedHashMap或TreeMap。
答案 3 :(得分:0)
您需要执行以下步骤:
答案 4 :(得分:0)
保持简单的提示:不要试图一次性解析所有内容。例如,首先尝试检索原始键值对,例如'activity =“add”'。然后从那里继续。
答案 5 :(得分:0)
如果您只需要“请求”的值,最快的方法是:
void getRequest(String str) {
int start = str.indexOf("request=\"");
if (start != -1) {
start += 9; // request="
end = str.indexOf('"', start);
if (end != -1) {
return str.substring(start, end);
}
}
// not found
return null;
}
答案 6 :(得分:0)
我最熟悉Python正则表达式,但Java语法看起来是一样的。也许从任一端剥离'',然后使用像
这样的正则表达式遍历键值对'\s?([\w ]+)="([\w ]+)"\s?(.*?)'
(假设键和值仅由字母数字字符,空格和下划线组成;否则,您可以将\ w替换为其他字符集)此匹配中的三个组将是下一个键,即下一个值,和其余的字符串,可以用相同的方式解析,直到找到你需要的东西。