Java 将字符串转换为hashmap中的值
我正在开发一个程序,它读入一个字符串,然后根据hashmap中的值将该字符串的每个字符转换成一个数字 就像一个电话号码。我遇到的问题是它背后的逻辑,我似乎无法让它工作 我要做的是将字符串转换为字符数组,然后对其进行迭代并获取第一个字符。然后我在hashmap中找到与字母对应的键,并得到它的值。我将此值添加到空单词中(这将生成新字符串) 似乎无法让它工作,已经工作了一段时间。谢谢你的帮助 Hashmap值:映射为Java 将字符串转换为hashmap中的值,java,arrays,string,for-loop,hashmap,Java,Arrays,String,For Loop,Hashmap,我正在开发一个程序,它读入一个字符串,然后根据hashmap中的值将该字符串的每个字符转换成一个数字 就像一个电话号码。我遇到的问题是它背后的逻辑,我似乎无法让它工作 我要做的是将字符串转换为字符数组,然后对其进行迭代并获取第一个字符。然后我在hashmap中找到与字母对应的键,并得到它的值。我将此值添加到空单词中(这将生成新字符串) 似乎无法让它工作,已经工作了一段时间。谢谢你的帮助 Hashmap值:映射为 public static void setUpHashmap(){ let
public static void setUpHashmap(){
lettersToNumbers.put("abc", '2');
lettersToNumbers.put("def", '3');
lettersToNumbers.put("ghi", '4');
lettersToNumbers.put("jkl", '5');
lettersToNumbers.put("mno", '6');
lettersToNumbers.put("pqrs", '7');
lettersToNumbers.put("tuv", '8');
lettersToNumbers.put("wxyz", '9');
}
代码:
public静态字符串转换器charstringtonumbers(String str){
char[]stringArray=str.toCharArray();
字串=”;
对于(int i=0;i
您的集合包含类似(“abc”,2)的条目,但每次调用函数convertCharStringToNumber时,您都会检查映射是否一次包含一个字符,因此如果发送的字符串是“atq”,则会检查键a、t和q。但是,这些键都不存在于您创建的地图中。如果该地图看起来像:
lettersToNumbers.put("a",2);
lettersToNumbers.put("b",2");
lettersToNumbers.put("c",2";
//continue for the rest of the alphabet
然后这些键将实际包含在映射中。您的方式:迭代Hashmap键(Eek) 更好的方法:O(1)查找(使用Hashmaps的全部意义?) 将字符作为键放入hashmap并进行查找。快速而肮脏的黑客)
static HashMap lettersToNumbers=new HashMap();
公共静态字符串转换器CharStringToNumber(字符串str){
String[]stringArray=str.split((?!^)”;
字串=”;
for(字符串字母:stringArray){
对于(字符串s:lettersToNumbers.keySet()){
如果(s.contains(String.valueOf(letter))){
word+=字母数。get(s);
}
}
}
System.out.println(word.toString());
返回词;
}
公共静态void setUpHashmap(){
字母编号。put(“abc”,“2”);
字母编号。放置(“def”,“3”);
lettersToNumbers.put(“ghi”,“4”);
lettersToNumbers.put(“jkl”,“5”);
lettersToNumbers.put(“mno”,“6”);
字母编号。put(“pqrs”,“7”);
字母编号。put(“tuv”,“8”);
lettersToNumbers.put(“wxyz”,“9”);
}
或
static HashMap lettersToNumbers=new HashMap();
公共静态字符串转换器CharStringToNumber(字符串str){
char[]stringArray=str.toCharArray();
字串=”;
for(字符字母:stringArray){
if(字母编号。集装箱编号(字母)){
word+=lettersToNumbers.get(字母);
}
}
System.out.println(word.toString());
返回词;
}
公共静态void setUpHashMap(){
对于(int i=97,t=2;i假设您在程序中输入一个字符串,比如“xyzuabc”,那么程序将打印出相应的映射数字“47855213”
String name=”“;
Map lettersToNumbers=新HashMap();
lettersToNumbers.put('a','2');
字母编号。put('x','4”);
字母编号。put('u','5”);
lettersToNumbers.put('b','1');
字母编号。put('c','3');
lettersToNumbers.put('y','7');
字母编号。放置('z','8”);
字符串输入String=“xyzuabc”;
char[]splitNum=enteredString.toCharArray();
for(int i=0;i
您最好使用一个HashMap
,并将每个条目分别放入,如lettersToNumbers.put('a',2)
等等。你甚至可以编写一个单独的方法,遍历字符串中的字符,将它们分别放在映射中。你的HashMap中有字符串作为键,但你在HashMap中给get方法输入了一个字符。@magna_nz有一件事我不明白,就是你如何比较单个字符用“abc”类似字符串的键?键不应该也是单个字符吗?还有,你在程序中输入的是什么?是电话号码字符串还是名字?有点破坏了使用HashMap
的意义,你不这么认为吗?@DavidWallace你觉得第二种解决方案怎么样?那么你现在给出了两种解决方案?也许你应该将它们作为两个单独的解决方案发布答案,这样人们就可以分别投票了。例如,我可能希望投一个赞成票,投另一个反对票。但在回答你的问题——我对第二种解决方案怎么看——我认为这有点可怕。它相当复杂。不清楚什么是I
,什么是t
,所以变量名会更长更好。你还使用了数字,而你应该使用字符。我不相信它能处理“pqr”
所有人共享同一个数字,因此可能给出错误的答案。@DavidWallace该问题包含小写字母。显然,大写字母此代码不起作用。如果我理解正确,您能给出正确的解决方案吗?不,我的观点是,您的解决方案为s
分配的数字与t
相同,并且u
;与p
、q
和r
的数字不同。我知道问题是关于小写字母的。所以我应该将哈希映射为,并将字母表中的每个键映射为整数值?是的,基本上是这样。因此,当您逐个字符进行查找时,您不必遍历映射再次直接找到它
lettersToNumbers.put("a",2);
lettersToNumbers.put("b",2");
lettersToNumbers.put("c",2";
//continue for the rest of the alphabet
for(String key : lettersToNumbers.keySet()) {
if(key.contains(String.valueOf(stringArray[i])){
//Do what you want
}
}
static HashMap<String,Character> lettersToNumbers = new HashMap<String, Character>();
public static String convertCharStringToNumbers(String str){
String[] stringArray = str.split("(?!^)");
String word = "";
for (String letter : stringArray) {
for (String s : lettersToNumbers.keySet()) {
if (s.contains(String.valueOf(letter))) {
word += lettersToNumbers.get(s);
}
}
}
System.out.println(word.toString());
return word;
}
public static void setUpHashmap(){
lettersToNumbers.put("abc", '2');
lettersToNumbers.put("def", '3');
lettersToNumbers.put("ghi", '4');
lettersToNumbers.put("jkl", '5');
lettersToNumbers.put("mno", '6');
lettersToNumbers.put("pqrs", '7');
lettersToNumbers.put("tuv", '8');
lettersToNumbers.put("wxyz", '9');
}
static HashMap<Character, Integer> lettersToNumbers = new HashMap<Character, Integer>();
public static String convertCharStringToNumbers(String str){
char[] stringArray = str.toCharArray();
String word = "";
for (char letter : stringArray) {
if (lettersToNumbers.containsKey(letter)) {
word += lettersToNumbers.get(letter);
}
}
System.out.println(word.toString());
return word;
}
public static void setUpHashMap(){
for (int i=97, t = 2; i<121; i+=3, t++){
lettersToNumbers.put((char)i, t);
lettersToNumbers.put((char)(i+1), t);
lettersToNumbers.put((char)(i+2), t);
}
lettersToNumbers.put((char)(122), 9);
}
String name = "";
Map<Character, String> lettersToNumbers = new HashMap<Character, String>();
lettersToNumbers.put('a', "2");
lettersToNumbers.put('x', "4");
lettersToNumbers.put('u', "5");
lettersToNumbers.put('b', "1");
lettersToNumbers.put('c', "3");
lettersToNumbers.put('y', "7");
lettersToNumbers.put('z', "8");
String enteredString = "xyzuuabc";
char[] splitNum = enteredString.toCharArray();
for (int i = 0; i < splitNum.length; i++) {
if (lettersToNumbers.containsKey(splitNum[i])) {
name += lettersToNumbers.get(splitNum[i]);
}
}
System.out.println(name);
}