2016-01-22 53 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的答案讓我知道,我能夠修復我的代碼 –