我正在尝试创建一个电话阅读器程序。如果用户输入单词,程序将输出等效的电话号码。使用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。
答案 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);
}
}
希望这会有所帮助。