我正在尝试将String解析为几个变量。字符串可以包含以下4个标记:"name, size, age, gender"
,但它们不一定都必须存在。可能的字符串示例。
Example 1. "name:T-rex;"
Example 2. "name:T-rex;size:8;"
Example 3. "name:T-rex;age:4;gender:female"
我试图这样做:
private String name;
private String size;
private String age;
private String gender;
private String parse(String data)
{
String [] parts = data.split(";");
name = parts[0];
size = parts[1];
age = parts[2];
gender = parts[3];
}
但这仅在String data
包含所有4个标记的情况下有效。我怎么解决这个问题?我确实需要4个变量。
答案 0 :(得分:2)
最好的方法是将字符串解析为键/值对,然后调用通过键设置它们的方法:
/**
* Set field based on key/value pair
*/
private void setValue(String key, String value) {
switch(key) {
case "name": {
this.name = value;
break;
}
case "age" : {
this.age = value;
break;
}
//...
}
}
并以编程方式调用它:
String[] k = "name:T-rex;age:4;gender:female".split(";");
for(String pair: k) {
String[] a = pair.split(":");
setValue(a[0], a[1]);
}
这使您可以灵活一些,甚至可以丢失一些键。
答案 1 :(得分:0)
使用哈希图的魔力。
首先,分割属性:
16 000 000
然后获取名称值对:
String[] parts = inStr.split( ";" );
List<String> properties = Arrays.asList(parts);
现在您可以无序访问属性,和/或测试是否包含tis:
HashMap<String,String> map = new HashMap<String,String>();
Iterator<String> iter = properties.iterator();
for (String property : properties) {
int colPosn = property.indexof(":");
// check for error colPosn==-1
map.put( property.substring(0, colPosn), property.substring(colPosn+1) );
}