【问题标题】:Looping through word letter by letter, output a number corresponding to that letter/character逐个字母循环遍历单词,输出与该字母/字符对应的数字
【发布时间】:2019-07-07 20:22:09
【问题描述】:

我正在尝试创建一个电话阅读器程序。如果用户输入一个单词,程序将输出等效的电话号码。使用 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。

【问题讨论】:

  • 我做了一个快速的谷歌,有很多可能的例子你可以尝试基本的想法是,你需要设计出在字符和对应的数值之间进行映射
  • 字母如何映射到数字是a-&gt;1,b-&gt;2,...,z-&gt;26,还是像手机键盘一样映射为a-&gt;1,b-&gt;1,...,z-&gt;9

标签: java string loops substring


【解决方案1】:

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

    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

【讨论】:

    【解决方案2】:

    这应该可以帮助您入门。只需将数字与对应的字母对应即可。

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-01-04
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多