解析字符串

| 我有一个字符串,格式为
<!-- accountId=\"123\" activity=\"add\" request=\"add user\" -->
参数数量和顺序是随机的。 我需要获取request的值,我需要从字符串中解析添加的用户文本。用Java做到这一点的最佳方法是什么?     
已邀请:
        您可以使用正则表达式进行解析,如下所示:
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。     
        听起来像是一个学校项目,所以除了解决问题外,我只会为您指明正确的方向:查看String Tokenizer类     
        我的解决方案是使用蛮力并根据需要拆分字符串,然后基于该字符串更新ѭ3。这可能是最简单的解决方案。 另一种方法是使用字符串令牌生成器,如Kyle建议的那样。 第三种选择是替换开始和结束标记,以使其形成有效的XML,然后将其解析为XML。是的,我知道这很像用大炮射击苍蝇。但是有时可能需要它,这是一个选择;)     
        您需要执行以下步骤: 找到一个很好的字符序列进行拆分 遍历返回的String数组 当所述String数组的当前索引与您要查找的键匹配时,检索值     
        保持简单的提示:不要一口气解析所有内容。例如,首先尝试检索原始键/值对,例如\'activity = \“ add \” \'。然后从那里继续。     
        如果只需要\“ request \”的值,则最快的方法是:
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;
}
    
        我对Python正则表达式很有经验,但是Java语法似乎是相同的。也许从任一端剥离\'\',然后使用类似regex的键值对进行迭代
\'\\s?([\\w ]+)=\"([\\w ]+)\"\\s?(.*?)\'
(假设键和值仅由字母数字字符,空格和下划线组成;否则,可以用其他字符集替换\\ w \)此匹配项中的三个组将是下一个键,下一个值以及字符串的其余部分,可以用相同的方式对其进行解析,直到找到所需的内容为止。     

要回复问题请先登录注册