如何使用Java Scanner控制台从String输入标记

时间:2014-11-03 22:52:19

标签: java string console token

我有一项任务,要求提供一种我不熟悉的输入形式。它要求输入是一个字符串,我们必须从该字符串中拉出一个int和double。我无法弄清楚如何使用所需的输入语句“console.nextDouble()”和“console.nextInt()”来完成此操作。我包括了下面说明的相关部分和我编写的代码。任何有关如何编写这些内容的见解都会有所帮助。

  

说明:在这一部分获得最多5分   分配时,您的程序必须接受输入为4个令牌并验证   输入采用适当的格式。第一个令牌将是   “金额”或“年”(不含报价)。如果第一个令牌是   “金额”,下一个是贷款金额,应该读入   使用console.nextDouble()。如果第一个令牌是“年”,则下一个   token是年数,应该用   console.nextInt()。如果第一个标记是“金额”,则为第三个标记   应该是“年”,并将年数作为第四个读入   使用console.nextInt()的令牌。如果第一个令牌是“年”,那么   第三个标记应该是“金额”,金额应该用   console.nextDouble()。任何其他令牌都被视为无效输入。

public static void main(String[] args) {
    final Scanner console = new Scanner(System.in);
    System.out.println("Project 2 written by KC");
    System.out.println();
    System.out.println("Enter the loan amount and loan duration in years,\nfor example amount 3000 years 2");
    String input = console.nextLine();
    String[] parts = input.split(" ");
    String part1 = parts[0]; 
    String part2 = parts[1];
    String part3= parts[2];
    String part4 = parts[3];
    if (part1.equals("amount")) {
        double amount = console.nextDouble(part2);
        int years = console.nextInt(part4);
    } else if (part1.equalsIgnoreCase("years")){
        int years = console.nextInt(part2);
        double amount = console.nextDouble(part4);
    }
    int years= console.nextInt();
    double rate = loanRate(amount);
    System.out.println("Loan Amount: "+ customFormat(amount));
    System.out.println("Loan Period: " + years + " years");
    System.out.println("Loan Rate: " + rate + "%");
    System.out.println("Monthly Payment: " + customFormat(loanMonthlyPayment(amount, years, rate)));
    System.out.println("Month" + padOnLeft("Balance", 15) + padOnLeft("Payment", 15) + padOnLeft("Remaining", 15));
    System.out.println("Total Payment Amount: " + customFormat(loanTotalPayment(amount, years, rate, (loanMonthlyPayment(amount, years, rate)))));
    }
}

2 个答案:

答案 0 :(得分:0)

改变这个:

String input = console.nextLine();

要:

String input = console.next();

next()应该采用字符串类型。

根据http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

  

public String next(模式模式)

     

如果匹配指定的模式,则返回下一个标记。这个   方法可能会在等待输入扫描时阻塞,即使是先前的   hasNext(Pattern)的调用返回true。如果匹配   成功后,扫描仪会超过与之匹配的输入   图案。

     

参数:       pattern - 要扫描的模式返回:       下一个标记抛出:       NoSuchElementException - 如果没有更多令牌可用       IllegalStateException - 如果此扫描程序已关闭

答案 1 :(得分:0)

这是你的问题。你想使用Scanner从一个句子中提取单词并得到整数和双值。你试试这个片段。我修改了你的部分代码。: -

    Scanner scan=new Scanner(System.in);
    System.out.println("Enter the string:-");
    String st=scan.nextLine();
    Scanner sc=new Scanner(st);
    String arr[]=new String[4];
    int i=0;
    double val=0;
    int n=0;
    while(i<4){
        String st1=sc.next();
        arr[i]=st1;
        i++;
    }
    if(arr[0].equalsIgnoreCase("amount")){
    n=Integer.parseInt(arr[3]);
    val=Double.parseDouble(arr[1]);
}
    if(arr[0].equalsIgnoreCase("years")){
        val=Double.parseDouble(arr[3]);
        n=Integer.parseInt(arr[1]);
    }