输出中每个整数之间的连字符

时间:2017-03-06 20:24:11

标签: java

所以我必须编写一个模仿电话键盘的程序,而它会将一串文本转换为整数:abc(2),def(3),ghi(4),jkl(5),mno(6) ) pqrs(7),tuv(8),wxyz(9)。除了输出必须在数字之间有连字符( - )。

示例输入:Alabama

输出:2-5-2-2-2-6-2

但我只输出2522262。我该如何正确格式化?

public class Keypad {
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    System.out.print("Enter a string: ");
    String s = sc.nextLine();

    System.out.println(getNumbers(s));
}

public static String getNumbers(String s) {
    String result = new String();

    for (int i = 0; i < s.length(); i++) {
        if (Character.isLetter(s.charAt(i))) {
        result += getNumber(Character.toUpperCase(s.charAt(i)));
        }
        else {
            result += s.charAt(i);
        }
    }
    return result;
}

public static int getNumber(char upperCaseLetter) {
    int number = ((upperCaseLetter - 'A') / 3) + 2;
    if (number < 7) {
        return number;
    }
    else if (upperCaseLetter - 'A' < 20) {
        return 7;
    }
    else if (upperCaseLetter - 'A' < 23) {
        return 8;
    }
    else {
        return 9;
    }
  }
}

4 个答案:

答案 0 :(得分:2)

转到构造结果的位置并添加连字符:

sonar.projectKey=${POM_ARTIFACTID}
sonar.projectName=${POM_DISPLAYNAME}
sonar.projectVersion=${POM_VERSION}
sonar.sources=src
sonar.java.binaries=target
sonar.language=java
sonar.sourceEncoding=UTF-8

然后在你返回之前,你将不得不去除最后一个连字符:

    result += getNumber(Character.toUpperCase(s.charAt(i)));
    result += "-";

所以整个方法看起来像这样:

    return result.substring(0, result.length() - 1);

答案 1 :(得分:1)

将getNumbers(String)中的代码更改为

 for (int i = 0; i < s.length(); i++) {
    if (Character.isLetter(s.charAt(i))) {
    result += getNumber(Character.toUpperCase(s.charAt(i)));
    if (i < (s.length-1)
       result += '-";
    }
}
return result;

}

答案 2 :(得分:1)

Java 8中有一种方法可以做到这一点。使用String.joindocs在每个字符后添加短划线。

public static String getNumbers(String s) {
        String result = new String();

        for (int i = 0; i < s.length(); i++) {
            if (Character.isLetter(s.charAt(i))) {
            result += getNumber(Character.toUpperCase(s.charAt(i)));
            }
            else {
                result += s.charAt(i);
            }
        }

        return String.join("-", result.split("");
    }

注意

您应该尽量避免将+=与字符串一起使用,StringBuffer可以提供更好的效果。连接字符串时,实际上是为每个连接的新字符串创建新对象。想象一个大循环,你将有n个对象来创建新的字符串。

答案 3 :(得分:1)

为此,已将

StringJoiner添加到Java 8中。非常简单易用:

StringJoiner sj = new StringJoiner("-", "", "");
sj.add("1").add("1").add("2");
String desiredString = sj.toString();

或使用Stream API,在您的情况下可能会更方便一些:

List<Integer> integers = Arrays.asList(1,2,3,4,5);
String hyphenSeparatedNumbers = integers.stream()
    .map(Object::toString)
    .collect(Collectors.joining("-"));

同样String.join是此任务的绝佳替代方案。