java - 在输出中的每个数字之间实现连字符

标签 java

所以我正在编写一个模仿手机键盘的程序,而它将文本字符串转换为整数: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/

相关文章:

Java Else If block 无法正常工作

java - 如何使用 Java 反射从文件中读取类和对象名称?

java - 如何使用 bundle 将多维数组列表传递给另一个 Activity

java - 在 Spring Boot 中将无效的 json 请求正文传递给 Rest api 时未收到异常

Windows 7 上的 Java 7 64 位 : how to switch java versions

java - 对执行 Swing 应用程序的主类中的 SwingUtilities.invokeLater() 方法的调用到底是什么?

java - 如何在 Java、JPA 中返回 Map<String, Object>?

java - 使用 JPA 进行 GIS 几何映射后的异常

java - ffmpeg 在 windows 上用 java 运行

java - 如何检测docker容器是否崩溃