所以我正在编写一个模仿手机键盘的程序,而它将文本字符串转换为整数:abc(2)、def(3)、ghi(4)、jkl(5)、mno(6 )、pqrs(7)、tuv(8)、wxyz(9)。但输出的数字之间应有连字符 (-)。
输入示例:阿拉巴马州
输出:2-5-2-2-2-6-2
但是我的代码只输出2522262
。我该如何正确格式化它?
import java.util.Scanner;
public class PhoneKeypad {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(getNumbers(str));
}
private static final char[] DIGITS = (
// ABC DEF
"222" + "333"
+ // GHI JKL MNO
"444" + "555" + "666"
+ // PQRS TUV WXYZ
"7777" + "888" + "9999").toCharArray();
public static String getNumbers(CharSequence s) {
StringBuilder result = new StringBuilder(s.length());
for (int i = 0; i < s.length(); i++) {
char c = Character.toUpperCase(s.charAt(i));
if ('A' <= c && c <= 'Z') {
result.append(DIGITS[c - 'A']);
}
}
}
最佳答案
在每个数字后面添加 -
。我认为最简单的方法是改变
result.append(DIGITS[c - 'A']);
至
result.append(DIGITS[c - 'A']).append('-');
然后在返回时删除最后一个 -
,
public static String getNumbers(CharSequence s) {
StringBuilder result = new StringBuilder(s.length() * 2); // <-- digit-digit...
for (int i = 0; i < s.length(); i++) {
char c = Character.toUpperCase(s.charAt(i));
if ('A' <= c && c <= 'Z') {
result.append(DIGITS[c - 'A']).append('-');
}
}
if (result.length() > 1) {
result.setLength(result.length() - 1);
}
return result.toString(); // <-- Don't forget to return the result.
}
如果传入 s
,您可能会发现更容易,您可以调用 toUpperCase()
和 toCharArray()
,然后使用 for-each
循环。就像,
public static String getNumbers(String s) {
StringBuilder result = new StringBuilder(s.length() * 2);
for (char c : s.toUpperCase().toCharArray()) {
if (c >= 'A' && c <= 'Z') { // <-- I find this test easier to read,
// but that's just my opinion.
result.append(DIGITS[c - 'A']).append('-');
}
}
if (result.length() > 1) {
result.setLength(result.length() - 1);
}
return result.toString();
}
关于java - 在输出中的每个数字之间实现连字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42755969/