如何从扫描仪输入中获取子字符串?
(在您说“重复”或“查找它”之前,我已经说过。我没有得到适用的答案,或者在我目前在编程课程中可以使用的范围之内。)
我正在尝试让程序使用扫描程序类接受用户输入,然后打印出部分输入,但仅打印尾端。在此示例中,我让扫描仪要求借记卡号,并希望将输入打印为“ **** **** **** nnnn”(nnnn是来自扫描仪输入的数字)。这是我所拥有的:
import java.util.Scanner;
public class CyberlifePurchase
{
public static void main(String[ ] args)
{
Scanner payment = new Scanner(System.in);
System.out.println("Please enter your debit card number: ");
String cardNumber = in.next();
System.out.println();
String concealedCardNumber = cardNumber.substring(15);
System.out.println("Card Number: " + "**** **** **** " + concealedCardNumber);
当我编译所有内容时,没有编译错误,但是当我运行程序时,这是输入卡号(nnnn nnnn nnnn nnnn格式)后得到的结果:
java.lang.StringIndexOutOfBoundsException: String index out of range: -11
答案 0 :(得分:4)
您应该使用in.nextLine()
而不是in.next()
next
类中的 Scanner
方法使用空格作为令牌,并且仅在空格之前返回数据,因此您可以使用nextLine
方法
答案 1 :(得分:1)
scanner.nextLine()
代替scanner.next()
。originalString.substring(originalString.length()-4)
; 将4替换为要输出的实际字符数。检查原始字符串的长度是否大于减去的值(在上面的示例中为4)也是明智的选择。
答案 2 :(得分:0)
除了修复代码外,如果您想打动老师,还应该添加一些错误检查。这可以作为防止StringIndexOutOfBoundsException
的保护措施。例如,用以下代码替换最后两行代码:
if (cardNumber.length() < 19) {
System.out.println("c'mon... its like this!! \"nnnn nnnn nnnn nnnn\"");
} else {
String concealedCardNumber = cardNumber.substring(15);
System.out.println("Card Number: " + "**** **** **** " + concealedCardNumber);
}