扫描仪输入的子字符串

时间:2018-08-10 21:39:11

标签: java substring java.util.scanner bluej

如何从扫描仪输入中获取子字符串?

(在您说“重复”或“查找它”之前,我已经说过。我没有得到适用的答案,或者在我目前在编程课程中可以使用的范围之内。)

我正在尝试让程序使用扫描程序类接受用户输入,然后打印出部分输入,但仅打印尾端。在此示例中,我让扫描仪要求借记卡号,并希望将输入打印为“ **** **** **** 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

3 个答案:

答案 0 :(得分:4)

您应该使用in.nextLine()而不是in.next()

next类中的

Scanner方法使用空格作为令牌,并且仅在空格之前返回数据,因此您可以使用nextLine方法

答案 1 :(得分:1)

  1. 如前所述,使用scanner.nextLine()代替scanner.next()
  2. 如果您想要字符串的最后一部分,则使用类似以下内容的方法更安全: 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);
}