java - 在 Java 上打印破折号的问题
问题描述
我正在编写一个程序,该程序模拟将字母电话号码转换为数字。例如:888-get-food == 555-438-3663。
最初,用户应按以下格式输入电话号码:888-GET-FOOD(带有破折号)。当我尝试检查用户输入是否有破折号时,它会打印破折号,但前面有数字 1。很烦人。
这是我到目前为止所拥有的:
// Ask the user to enter the phone number
System.out.println("Please enter the phone number: ");
// Save the phone number into a string
String initialPhoneNumber = input.nextLine();
// Convert user input to UPPERCASE
initialPhoneNumber = initialPhoneNumber.toUpperCase();
// This will be the phone number converted
String finalPhoneNumber = fullPhoneNumber(initialPhoneNumber);
// Print number
System.out.println(initialPhoneNumber);
System.out.println(finalPhoneNumber);
for (int i = 0; i < strLength; i++) {
char letter = initialPhoneNumber.charAt(i);
if (Character.isLetter(letter)) {
switch (letter) {
case 'A': case 'B': case 'C': number = 2; break;
case 'D': case 'E': case 'F': number = 3; break;
case 'G': case 'H': case 'I': number = 4; break;
case 'J': case 'K': case 'L': number = 5; break;
case 'M': case 'N': case 'O': number = 6; break;
case 'P': case 'Q': case 'R': case 'S': number = 7; break;
case 'T': case 'U': case 'V': number = 8; break;
case 'W': case 'X': case 'Y': case 'Z': number = 9; break;
case '-':number='-';
}
}
else if (Character.isDigit(letter)) {
number = Character.getNumericValue(letter);
}
else if (initialPhoneNumber.charAt(i) == '-') {
number = Character.getNumericValue(letter);
}
这是输出:
请输入电话号码:
555-GET-FOOD
555-GET-FOOD
555-1438-13663
为什么数字 1 出现在破折号前面?我怎样才能让它不显示?换句话说,我如何打印或分隔由破折号分隔的数字?
谢谢
解决方案
问题出在声明中:
else if (initialPhoneNumber.charAt(i) == '-') {
number = Character.getNumericValue(letter);
}
如果作为参数传递的字符不是数字,则该方法Character.getNumericValue()
返回。
由于您正在传递,该方法返回。
这就是为什么你得到破折号之后。-1
-
-1
1
更新
假设 for 循环是您的方法的一部分fullPhoneNumber
,您可以按如下方式解决它:
public String fullPhoneNumber(String initialPhoneNumber)
{
StringBuilder result;
result = new StringBuilder();
for (int i = 0; i < initialPhoneNumber.length(); i++)
{
char letter = Character.toUpperCase(initialPhoneNumber.charAt(i));
switch (letter)
{
case 'A':
case 'B':
case 'C':
letter = '2';
break;
case 'D':
case 'E':
case 'F':
letter = '3';
break;
case 'G':
case 'H':
case 'I':
letter = '4';
break;
case 'J':
case 'K':
case 'L':
letter = '5';
break;
case 'M':
case 'N':
case 'O':
letter = '6';
break;
case 'P':
case 'Q':
case 'R':
case 'S':
letter = '7';
break;
case 'T':
case 'U':
case 'V':
letter = '8';
break;
case 'W':
case 'X':
case 'Y':
case 'Z':
letter = '9';
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '-':
break;
default:
throw new IllegalArgumentException("");
}
result.append(letter);
} // for
return (result.toString());
} // fullPhoneNumber
推荐阅读
- jquery - 通过jQuery在textarea中获取最大值形式的自定义html
- function - 在 python 中压缩 CSV 文件的函数
- javascript - 如何在本机反应中仅显示来自firestore的登录用户的帖子?
- javascript - 请求的模块不提供名为 webpack? 的导出?
- excel - Laravel:使用 maatwebsite/excel 在导出 excel 中显示 html 输出而不是代码
- php - 无法在 GAE 上的 wordpress 永久链接中删除“index.php”
- angular - Angular Material 表中的内联编辑
- c# - 尽管引用了类型库,为什么 C# 在 COM 接口上使用后期绑定?
- mongodb - 如何使用 Mongoose 从查询中返回孙子属性?
- javascript - Tiny MCE 关闭 blob