Работа с текстом в Java - PullRequest
0 голосов
/ 13 августа 2010

У меня есть строка с этим форматом:

"key=some value|otherkey=other value|key3=yet another value"

Мне нужно создать функцию с такой подписью:

public String update(String all,String key, String value)

Где all - предыдущая строка, key - заданный ключ для замены (или добавления) и value нового значения.

Я думал о некоторых решениях, но их трудно читать и они не очень элегантны. Я надеялся, что один из вас, ребята, может прийти с чем-то, что выглядит лучше.

PS: У меня нет проблем с использованием регулярных выражений, но это должно быть сделано без какой-либо сторонней библиотеки, только стандартной библиотеки Java.

Спасибо!

Ответы [ 2 ]

1 голос
/ 13 августа 2010

Простой код ниже, без регулярных выражений.

public String update(String all, String key, String value) {    
    StringBuilder result = new StringBuilder();
    boolean replaced = false;   
    for (String old : all.split("[|]")) {
        if (old.startsWith(key + "=")) {
            replaced = true;
            result.append("|" + key + "=" + value);
        } else {
            result.append("|" + old);
        }
    }
    if ( ! replaced) {
        result.append("|" + key + "=" + value);
    }    
    return result.toString().substring(1); // avoid initial '|'
}
1 голос
/ 13 августа 2010

Могу я спросить, почему вы используете для этого строку? Я понимаю, что, вероятно, уже слишком поздно что-либо менять на этом этапе, но не будет ли «Карта» лучше для такого рода обработки? Тогда вы можете просто обновить, используя самые подходящие (в данном случае) методы Map?

Пример:

myMap.put(K key, V value)//you could use a HashMap maybe.

SP

...