2016-01-22 92 views
1

我正在处理一些代码,您需要输入两个数字,用逗号分隔,然后继续执行其他数字操作。解析字符串并将某些元素投射到int

我想知道如何解析字符串,将第一个数字转换为逗号,然后将其转换为int,然后继续将第二个数字转换为int。

这里是我工作的代码:

Scanner Scan = new Scanner(System.in); 
    System.out.print("Enter 2 numbers (num1,num2): "); 

    //get input 
    String input = Scan.nextLine(); 

    //parse string up to comma, then cast to an integer 
    int firstNum = Integer.parseInt(input.substring(0, input.indexOf(','))); 

    int secondNum = Integer.parseInt(Scan.nextLine()); 
    Scan.close(); 

    System.out.println(firstNum + "\n" + secondNum); 

第一个数字被强制转换为整数就好了,我碰上与第二个问题。

Exception in thread "main" java.lang.NumberFormatException: For input string: "" 

我将如何能够从输入字符串中取出第二个整数并将其转换为Int。

回答

1

您正遇到的错误模式看起来确实合理,因为您正在读取扫描仪的下一行,因此不再对第一个输入进行操作。

什么你要找的大概是这样的:

int secondNum = Integer.parseInt(input.substring(input.indexOf(',') + 1)); 
+0

哦,好吧这是有道理的,现在,我需要重新访问原始输入和利用每一个逗号之后。谢谢你的帮助。 –

0

它失败,因为所有的数字都是由在同一行的用户给出。你有两个Scanner.nextLine();第二个可能是空的。

这里是一个解决方案:

Scanner Scan = new Scanner(System.in); 
System.out.print("Enter 2 numbers (num1,num2): "); 

//get input 
String input = Scan.nextLine(); 

StringTokenizer st = new StringTokenizer(input, ","); 
List<Integer> numbers = new ArrayList<>(); 
while (st.hasMoreElements()) { 
    numbers.add(Integer.parseInt(st.nextElement())); 
} 

System.out.println(numbers); 
0

当定义secondNum,你设置它等于下一行的扫描对象读取的解析整数,但所有的数据都已经被读取。因此,不要再次从扫描仪读取,您需要在逗号后的所有内容上调用Integer.parseInt。

0

如果输入在一行,无论是数字将被存储在变量Stringinput。您不需要扫描另一行。它将是空的,并且您不能将空字符串投射到int。为什么不像第一个那样解析第input号中的第二个数字呢?

+0

是的,Dolda2000的答案让我知道,我能够修复我的代码 –