Разбор строки в переменные - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь разобрать строку в несколько переменных. Строка может содержать эти 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 голосов
/ 27 августа 2018

Используйте магию хэш-карт.

Сначала разделите свойства:

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");
    ...
0 голосов
/ 27 августа 2018

Лучший способ - разобрать строку на пары ключ / значение, а затем вызвать метод, который устанавливает их по ключу:

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

Это позволяет вам быть гибким, даже если некоторые ключи отсутствуют.

...