所以我必须编写一个模仿电话键盘的程序,而它会将一串文本转换为整数: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;
}
}
}
答案 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.join
,docs在每个字符后添加短划线。
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是此任务的绝佳替代方案。