按指数获取RegEx Group

时间:2015-05-06 07:46:02

标签: java regex json

我在Java中创建了一个用于创建对象的类,我的一个静态方法将一些JSON转换为对象(我有一个JavaScript版本,因此可以轻松转换)。

JSON的示例位是:

{"header": ["H1","H2","H3"], "cells": [["R1C1","R1C2","R1C3"],["Row 2, Column 1","Row 2, C2","R2 - C2"]]}

在我的方法中,我没有使用任何JSON包,因为据我所知,它需要我下载一个,所以我一直在使用RegEx来提取数据。

方法:

public static Table jsonToTable(String json) {
    Pattern h = Pattern.compile("\"header\": \[((?:\" *[^\"]+ *\",?)+)]");
    Pattern r = Pattern.compile("\"cells\": \[((\[(?:(?:\" *[^\"]+ *\",?)+)],?)+)]");

    Matcher hm = h.matcher(json);
    Matcher rm = r.matcher(json);

    ArrayList<String> header = new ArrayList(Arrays.asList(hm.group(0).split(",")));
    String[] _rows = rm.group(0).split(",");
    ArrayList<ArrayList<String>> rows = new ArrayList<ArrayList<String>>();
    for (String row : _rows) {
        row = row.replace("[","");
        row = row.replace("]","");
        rows.add(new ArrayList(Arrays.asList(row.split(","))));
    }
    Table t = new Table(header);
    for (ArrayList<String> row : rows) {
        t.addRow(row);
    }
    return t;
}

使用此方法,每当我使用它时都会收到运行时错误。我完全没有描述,所以我不能100%确定导致错误的原因。我只是假设小组。

然而,对于模式,我如何在上面编写它们,虽然ideone.com编译器不喜欢这样但开放的[括号已被转义,所以可能是问题所在。

是否有人能够告诉我导致运行时错误的原因?我已经尝试了我能想到的一切。

1 个答案:

答案 0 :(得分:0)

如果您没有匹配,则无法使用group()对象的Matcher方法。您应该在以下块中使用此方法:

 while(matcher.find()){ //this if you want to match globally
      String matched = matcher.group();
 } 

 if(matcher.find()){ //this if you want just the first match
      String matched = matcher.group();
 }