逐字母循环单词,输出与该字母/字符对应的数字

时间:2019-02-13 21:27:36

标签: java string loops substring

我正在尝试创建一个电话阅读器程序。如果用户输入单词,程序将输出等效的电话号码。使用while,if和substrings我将如何处理呢?

我尝试使用while,字符串替换和for。

   Scanner keyboard = new Scanner (System.in);

   String phoneWord;
   int length, i ;

   phoneWord = keyboard.nextLine();
   length = phoneWord.length();



   while (i < length) {

我希望输出等效的电话号码。 例如如果单词中有A,它将在对应的位置输出1。

2 个答案:

答案 0 :(得分:0)

有几种将字母映射到数字的方法。如果您想要一个简单的映射,a:1,b:2,...,i:9,j:10,...,z:26您可以执行以下操作,并利用chars映射到ints的事实:

    StringBuilder sb= new StringBuilder();
    for (char letter : phoneWord.toLowerCase().toCharArray()) {
        sb.append((int) letter - 96);
    }
    System.out.println(sb.toString());

您可以使用%10添加一个模数以将数字保持在0到9之间,这将映射a:1,b:2,...,i:9,j:0,...,z:6

    sb = new StringBuilder();
    for (char letter : phoneWord.toLowerCase().toCharArray()) {
        sb.append(((int) letter - 96) % 10);
    }
    System.out.println(sb.toString());

如果您想要自定义映射,例如电话映射,则可以这样创建映射:

    Map<Character, Integer> letterMap = new HashMap<>();
    letterMap.put('a', 1);
    letterMap.put('b', 1);
    letterMap.put('c', 1);
    letterMap.put('d', 2);
    // ...
    letterMap.put('z', 9);

    sb = new StringBuilder();
    for (char letter : phoneWord.toLowerCase().toCharArray()) {
        sb.append(letterMap.get(letter));
    }
    System.out.println(sb.toString());

我在字符串上使用.toLowerCase()来减少需要映射的字母数。为(int) 'A' = 65(int) 'A' = 97

答案 1 :(得分:0)

这应该使您入门。只需将数字放在其对应的字母上,便会很好。

import java.util.HashMap;
import java.util.Scanner;

public class Main {

    public static void main(String args[]) throws Exception {

        Scanner keyboard = new Scanner(System.in);

        HashMap<Character, Integer> textToNum = new HashMap<Character, Integer>();

        ///Letters to their corresponding numbers here
        textToNum.put('a', 1);
        textToNum.put('b', 2);
        textToNum.put('c', 3);

        String phoneWord = keyboard.nextLine();
        String result = "";

        for(int i = 0; i < phoneWord.length(); i++) {
            result += textToNum.get(phoneWord.charAt(i));
        }

        System.out.println(result);
    }

}

希望这会有所帮助。