【问题标题】:Parsing a String into variables将字符串解析为变量
【发布时间】:2018-08-27 18:22:46
【问题描述】:

我正在尝试将字符串解析为几个变量。字符串可以包含这 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个变量。

【问题讨论】:

  • 对于parts 中的每个项目,在: 上再次拆分。
  • 你能保证它们不会混在一起吗?
  • @MitchelPaulin 顺序不会改变,所以名字永远是第一位的。但是,没有一个是必需的。您可能会得到一个缺少 sizegenderdata

标签: java string parsing


【解决方案1】:

最好的方法是将字符串解析成键/值对,然后调用一个方法来按键设置:

/**
* 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]);
}

这使您可以灵活,甚至允许缺少某些键。

【讨论】:

  • split(":") 而不是 "="
  • @ernest_k 谢谢!
【解决方案2】:

使用哈希图的魔力。

首先,拆分属性:

String[] parts = inStr.split( ";" );
List<String> properties = Arrays.asList(parts);

然后获取名称值对:

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

现在您可以乱序访问属性,和/或测试包含,如 tis:

if(map.containsKey("name") && map.containsKey("age")) {
    // do something
    String name = map.get("name");
    String age = map.get("age");
    ...

【讨论】:

    猜你喜欢
    • 2015-03-19
    • 2015-02-06
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2015-09-02
    相关资源
    最近更新 更多