我有一行具有特定格式的字符串给我带来了麻烦。我想采取下面的字符串:
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那样设置它。如果你能告诉我你是如何得到那个很棒的答案的。在继续向别人寻求帮助之前,我想确保我对字符串有一个坚定的理解。
答案 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());
}
}
}
答案 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();
}