Как отсортировать строку в карту и распечатать результаты - PullRequest
0 голосов
/ 14 июля 2011

У меня есть строка в формате nm=Alan&hei=72&hair=brown

Я хотел бы разделить эту информацию, добавить преобразование к первому значению и распечатать результаты в формате

nm Name Alan
hei Height 72
hair Hair Color brown

Я рассмотрел различные методы, использующие функцию split и hashmaps, но мне не повезло соединить все вместе.

Любой совет был бы очень полезен для меня.

Ответы [ 4 ]

3 голосов
/ 14 июля 2011
Map<String, String> aliases = new HashMap<String, String>();
aliases.put("nm", "Name");
aliases.put("hei", "Height");
aliases.put("hair", "Hair Color");

String[] params = str.split("&"); // gives you string array: nm=Alan, hei=72, hair=brown

for (String p : params) {
    String[] nv = p.split("=");
    String name = nv[0];
    String value = nv[1];
    System.out.println(nv[0] + " " + aliases.get(nv[0]) + " " + nv[1]);
}

Я действительно не понимаю, с чем у вас была проблема ...

0 голосов
/ 14 июля 2011
Map<String, String> propsMap = new HashMap<String, String>();
Map<String, String> propAlias = new HashMap<String, String>();

propAlias.put("nm", "Name");
propAlias.put("hei", "Height");
propAlias.put("hair", "Hair Color");

String[] props = input.split("&");

if (props != null && props.length > 0) {
    for (String prop : props) {
        String[] propVal = prop.split("=");

        if (propVal != null && propVal.length == 2) {
            propsMap.put(propVal[0], propVal[1]);
        }
    }
}

for (Map.Entry tuple : propsMap.getEntrySet()) {
    if (propAlias.containsKey(tuple.getKey())) {
        System.out.println(tuple.getKey() + " " + propAlias.get(tuple.getKey()) + " " + tuple.getValue());
    }
}
0 голосов
/ 14 июля 2011

Попробуйте что-то вроде этого:

static final String DELIMETER = "&"
Map<String,String> map = ...
map.put("nm","Name");
map.put("hei","Height");
map.put("hair","Hair color");

StringBuilder builder = new StringBuilder();
String input = "nm=Alan&hei=72&hair=brown"
String[] splitted = input.split(DELIMETER);
for(Stirng str : splitted){
     int index = str.indexOf("=");     
     String key = str.substring(0,index);
     builder.append(key);
     builder.append(map.get(key));
     builder.append(str.substring(index));
     builder.append("\n");
}
0 голосов
/ 14 июля 2011

HashMap состоит из множества пар ключ-значение. Поэтому, когда вы используете split , придумайте соответствующее регулярное выражение (&). Получив строковый массив, вы можете использовать один из элементов в качестве ключа (подумайте, какой элемент создаст лучший ключ). Однако теперь вы можете задаться вопросом: «Как мне разместить остальные элементы в качестве значений?». Возможно, вы сможете создать новый класс, в котором будут храниться остальные элементы и использовать объекты этого класса в качестве значений для хэш-карты.

Тогда печать станет проще - просто найдите значение соответствующего ключа. Это значение будет объектом; используйте соответствующий метод для этого объекта, чтобы получить элементы, и вы сможете распечатать все.

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

Другое дело: ваш дядя упоминает слово «сортировать». Я не совсем понимаю, что это значит в этом контексте ...

...