在地图中组合两个不同的字符串

时间:2016-07-31 04:47:13

标签: java dictionary hashmap

我一直在试用有关codingbat,map1&的新内容。 2.我已经完成了map1,我在map2的中途,但我只是坚持这个问题。我似乎无法弄清楚如何组合两个字符串。

  

给定一组非空字符串,返回Map<String, String>   用一个键可以看到每个不同的第一个字符,其值为   所有以该字符开头的字符串都附加在一起   命令它们出现在数组中。

示例:

firstChar(["salt", "tea", "soda", "toast"]) → {"t": "teatoast", "s": "saltsoda"}
firstChar(["aa", "bb", "cc", "aAA", "cCC", "d"]) → {"d": "d", "b": "bb", "c": "cccCC", "a": "aaaAA"}
firstChar([]) → {}

这是我的代码:

public Map<String, String> firstChar(String[] strings)                       
{             
  Map<String, String> map = new HashMap<String, String>();       
  String x = "";         
   for ( String s: strings )    
     {
      if ( s.substring(0,1) == s.substring(0,1))   
       x += s;   
         map.put(s.substring(0,1), x);        
     }     
  return map;   
}

我只获得{"d": "d", "b": "", "c": "", "a": ""}

我还试过s.substring(0, 1, map.get(s) + map.get(s))只返回null。如果有人能向我解释这一点,我将不胜感激!

谢谢!

4 个答案:

答案 0 :(得分:4)

你的逻辑错了,你正在比较字符串的第一个字符和它自己。此外,虽然这里不是您的问题,但您要将字符串与==而不是equals进行比较。 ==用于比较引用,equals用于比较逻辑相等。另外,要获取字符串的第一个字符,您只需使用s.charAt(0)即可。具有讽刺意味的是,如果您这样做,就不会遇到此问题,因为String.charAt会返回char,这是一种原始类型,因此可以使用==安全地进行比较。

包含各种改进和修复的代码:

public Map<String, String> firstChar(String[] strings) {             
  Map<String, String> map = new HashMap<>();                
  for (String s: strings) {
     map.merge(String.valueOf(s.charAt(0), s, String::concat);   
  }     
  return map;   
}

或Java-8之前:

public Map<String, String> firstChar(String[] strings) {             
  Map<String, String> map = new HashMap<>();                
  for (String s: strings) {
     String key   = String.valueOf(s.charAt(0));
     String value = map.get(key);
     map.put(key, (value == null ? "" : value) + s);        
  }     
  return map;   
}

答案 1 :(得分:0)

public Map<String, String> firstChar(String[] strings) {
Map<String, String> map = new HashMap<String, String> ();
  for (String s:strings) {
  if (!map.containsKey(s.substring(0,1))) {  // first time we've seen this string
      map.put(s.substring(0,1), s);

  }
  else
  {
     String existing = map.get(s.substring(0,1));
      map.put(s.substring(0,1), existing+s);
  }

}
  return map;
}

答案 2 :(得分:0)

public Map<String, String> firstChar(String[] strings) {
    Map<String, String> map = new HashMap<String, String>(strings.length);
    for (String string : strings) {
        String firstCharacter = String.valueOf(string.charAt(0));
        map.put(firstCharacter, map.getOrDefault(firstCharacter, "") + string);
    }
    return map;
}

答案 3 :(得分:0)

public Map<String, String> firstChar(String[] strings) {
    Map<String, String> str = new HashMap<String, String>();
    for (int i = 0; i < strings.length; i++) {
        String value = "";
        for (int j = 0; j < strings.length; j++) {
            if (strings[i].charAt(0) == strings[j].charAt(0)) {
                value = value+strings[j];
            }
        }
        str.put(Character.toString(strings[i].charAt(0)), value);
    }
    return str;
}