解析一个字符串

时间:2011-06-21 19:56:22

标签: java parsing string

我的字符串格式为

<!-- accountId="123" activity="add" request="add user" -->

参数数量和顺序是随机的。

我需要获取请求的值,我需要解析字符串中的添加用户文本。在Java中执行此操作的最佳方法是什么?

7 个答案:

答案 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"

如果您需要保留属性的顺序,则可以使用LinkedHashMapTreeMap

答案 3 :(得分:0)

您需要执行以下步骤:

  1. 找一个好的角色序列来分割
  2. 迭代返回的String数组
  3. 当所述String数组的当前索引与您要查找的键匹配时,检索值

答案 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替换为其他字符集)此匹配中的三个组将是下一个键,即下一个值,和其余的字符串,可以用相同的方式解析,直到找到你需要的东西。

相关问题