将字符串解析为变量

时间:2018-08-27 18:22:46

标签: java string parsing

我正在尝试将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个变量。

2 个答案:

答案 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) );        
    }