如何在Java中使用索引和解析

时间:2016-12-07 23:47:36

标签: java string substring indexof

我有一行具有特定格式的字符串给我带来了麻烦。我想采取下面的字符串:

String data = "[{\'ID\': 0001, \'Name\': Black Shirt, \'Cost\': 3.00, \'Asle\':1},{\'ID\': 0002, \'Name\': White Shirt, \'Cost\': 2.00, \'Asle\':1}]";

我想输出ID和费用:

0001
3.00
0002
2.00

这就是我所拥有的:

String data = "[{\'ID\': 0001, \'Name\': Black Shirt, \'Cost\': 3.00, \'Asle\':1},{\'ID\': 0002, \'Name\': White Shirt, \'Cost\': 2.00, \'Asle\':1}]";
String[] token = data.split("\'ID");
int firstindex = data.indexOf(",");
int lastindex = data.indexOf("");
String Id = null;
String Cost;
int i =1;
for(String s : token) {
    if (i==1) {
        Id = s.replaceFirst(data.substring(firstindex + 1, lastindex + 4), "");
        i++;
    } else {
        Cost = s.replaceFirst(data.substring(firstindex + 1, lastindex + 4), "");
    }
    System.out.print(Id);
    System.out.print(Cost);
}

尝试运行时出现以下错误。

String index out of range: -9

我还得到一个错误,因为无法索引成本,我不知道为什么我不能像使用Id那样设置它。如果你能告诉我你是如何得到那个很棒的答案的。在继续向别人寻求帮助之前,我想确保我对字符串有一个坚定的理解。

2 个答案:

答案 0 :(得分:0)

尝试以下代码。我认为它可以完全达到你想要的目的。

public class Test {
    public static void main(String...strings) {
        String data = "[{\'ID\': 0001, \'Name\': Black Shirt, \'Cost\': 3.00, \'Asle\':1},{\'ID\': 0002, \'Name\': White Shirt, \'Cost\': 2.00, \'Asle\':1}]";

        int idFrom, idTo, costFrom, costTo;
        String idStr = "{\'ID\': ";
        String nameStr = ", \'Name\': ";
        String costStr = ", \'Cost\': ";
        String asleStr = ", \'Asle\'";
        while(data.indexOf(idStr) != -1) {
            idFrom = data.indexOf(idStr) + idStr.length();
            idTo = data.indexOf(nameStr);
            System.out.println(data.substring(idFrom, idTo));
            costFrom = data.indexOf(costStr) + costStr.length();
            costTo = data.indexOf(asleStr);
            System.out.println(data.substring(costFrom, costTo));
            data = data.substring(costTo + asleStr.length());
        }
    }
}

正如评论所记录的那样,像JacksonGson这样的JSON解析器将让您的生活更轻松。

答案 1 :(得分:0)

使用Gson

JsonElement jelement = new JsonParser().parse(data);
JsonArray jarray = jelement.getAsJsonArray();
for(int i=0;jarray.size();i++){
    JsonObject  jobject = jarray.get(i).getAsJsonObject();
    String id = jobject.get("ID")..toString();
    String name = jobject.get("Name").toString();
    double cost = jobject.get("Cost").getAsDouble();
    String asle = jobject.get("Asle").toString();
}