Java 将字符串转换为hashmap中的值

Java 将字符串转换为hashmap中的值,java,arrays,string,for-loop,hashmap,Java,Arrays,String,For Loop,Hashmap,我正在开发一个程序,它读入一个字符串,然后根据hashmap中的值将该字符串的每个字符转换成一个数字 就像一个电话号码。我遇到的问题是它背后的逻辑,我似乎无法让它工作 我要做的是将字符串转换为字符数组,然后对其进行迭代并获取第一个字符。然后我在hashmap中找到与字母对应的键,并得到它的值。我将此值添加到空单词中(这将生成新字符串) 似乎无法让它工作,已经工作了一段时间。谢谢你的帮助 Hashmap值:映射为 public static void setUpHashmap(){ let

我正在开发一个程序,它读入一个字符串,然后根据hashmap中的值将该字符串的每个字符转换成一个数字

就像一个电话号码。我遇到的问题是它背后的逻辑,我似乎无法让它工作

我要做的是将字符串转换为字符数组,然后对其进行迭代并获取第一个字符。然后我在hashmap中找到与字母对应的键,并得到它的值。我将此值添加到空单词中(这将生成新字符串)

似乎无法让它工作,已经工作了一段时间。谢谢你的帮助

Hashmap值:映射为

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);
}