解析字符串

问题描述

| 我有一个字符串,格式为
<!-- 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 \)此匹配项中的三个组将是下一个键,下一个值以及字符串的其余部分,可以用相同的方式对其进行解析,直到找到所需的内容为止。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...