我有一个格式为nm=Alan&hei=72&hair=brown
我想将此信息拆分,将转换添加到第一个值并以格式打印结果
nm Name Alan
hei Height 72
hair Hair Color brown
我已经看过使用split函数和hashmaps的各种方法,但没有运气拼凑起来。
任何建议对我都非常有用。
答案 0 :(得分:3)
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]);
}
我真的不明白你的问题是什么......
答案 1 :(得分:0)
HashMap由许多键值对组成。因此,当您使用split时,请设计适当的正则表达式(&amp;)。一旦有了字符串数组,就可以使用其中一个元素作为键(考虑哪个元素将成为最佳键)。但是,您现在可能想知道 - “如何将其余元素作为值放置?”。也许您可以创建一个新类来存储其余元素,并使用此类的对象作为hashmap的值。
然后打印变得容易 - 仅搜索相应键的值。该值将是一个对象;在此对象上使用适当的方法来检索元素,您应该能够打印所有内容。
另外,请记住在代码中处理异常。例如检查空值等。
另一件事:你的qn提到“排序”这个词。在这种情况下,我没有完全理解这意味着......
答案 2 :(得分:0)
尝试这样的事情:
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");
}
答案 3 :(得分:0)
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());
}
}