Анализ кода - анализ запросов к массивам


У меня есть запрос такой "Азбука=1, деф=2, гхи=3" и мне нужно, чтобы разобрать его на массивы такой клавиши = [АБВ", " деф ги] и значений = [1,2,3]

в настоящее время мой код такой

String[] terms = query.split(",");
int termsCount = terms.length;
String[] keys = new String[termsCount];
String[] values = new Object[termsCount];

for(int i=0; i<termsCount; i++)
{
    if(terms[i].contains("="))
    {
        keys[i] = terms[i].split("=")[0];
        values[i] = terms[i].split("=")[1];
    }
}

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

Я делаю это право? Есть ли лучший способ сделать это?



819
5
задан 9 июня 2011 в 02:06 Источник Поделиться
Комментарии
2 ответа

Код, как это, нормально. Самое главное, что вы должны выполнить .сплит("=") только один раз:

String[] parts = terms[i].split("=");
keys[i] = parts[0];
values[i] = parts[1];

Однако существует более общий смысл: почему вы используете массивы?

Это очень необычно использовать массивы в Java, особенно в данном случае, когда ты сам говоришь, входные моей быть не хорошо сформированы, возможно, оставлю тебя с зазорами в массиве, которое вам потребуется, чтобы обойти позже. Вы должны по крайней мере использовать списокС. Или даже более подходящим будет карта (если "ключи" являются уникальными):

String[] terms = query.split(",");
Map<String, String> map = new HashMap<String, String>(terms.length);

for (String term in terms)
{
if(term.contains("="))
{
String[] parts = term.split("=");
map.add(parts[0], parts[1]);
}
}

4
ответ дан 9 июня 2011 в 03:06 Источник Поделиться

Никаких оснований для раскола в два раза. Сплит раз и сохранить результат. Также лучше сделать дополнительную проверку после разделения.

String[] split = terms[ i ].split( "=" );
if ( split.length == 2 )
{
...
}

И наконец, я бы не использовать массив для хранения результатов. Как вы сказали, она не может быть полностью заполнен, так как некоторые значения могли быть неверно. Использовать универсальный список для сохранения результатов. RetrievedValue может быть простой класс, держа оба значения.

1
ответ дан 9 июня 2011 в 03:06 Источник Поделиться