2016-11-17 207 views
2

我正在編寫一個程序,我需要爲索引輸入一個值,但索引應該是複合的,例如44GH。 我的問題是,如何讓程序不會崩潰,當我要求用戶輸入它,然後我想顯示它?Java輸入/輸出混淆

我一直在網站上尋找答案,但他們只是整數或字符串類型。 如果任何人都可以幫忙,會非常感激。

  Scanner s input = new Scanner(System.in); 
    private ArrayList<Product> productList; 

    System.out.println("Enter the product"); 
    String product = s.nextLine(); 

    System.out.println("Input code for your product e.g F7PP"); 
    String code = s.nextLine(); 
} 
public void deleteProduct(){ 
    System.out.println("Enter the code of your product that you want to delete "); 
    String removed = input.nextLine(); 
      if (productList.isEmpty()) { 
      System.out.println("There are no products for removing"); 
     } else { 
    String aString = input.next(); 
    productList.remove(aString); 
} 
} 
+0

如果將包含字母的字符串解析爲整數,您的代碼將崩潰。沒有辦法解決這個問題。你能告訴我們更多關於你打算如何處理輸入'44GH'的信息嗎? –

+0

對於要求用戶輸入產品名稱的程序,代碼和代碼應該是44GH。然後程序應該要求用戶從鍵盤輸入代碼,程序應該刪除它。 – flame

+0

這是不是很清楚你想要做什麼。你的意思是你只是想丟棄非數字部分? –

回答

0

最好的辦法是創建一些RegEx來解決這個問題,然後測試你的輸入是否與你的RegExp匹配。這裏有一個很好的網站來測試RegExp:Debuggex

然後,當你知道如何提取整數部分時,你解析它。

4

鑄造成整數之前刪除所有非數字字符:

String numbersOnly= aString.replaceAll("[^0-9]", ""); 
Integer result = Integer.parseInt(numbersOnly); 
0

我認爲OP希望打印出一個字符串只是但糾正我,如果我錯了。所以,

Scanner input = new Scanner(System.in); 
    String aString = input.nextLine(); // FFR55 or something is expected 
    System.out.println(aString); 

那麼顯然你可以使用:

aString.replaceAll(); 
    Integer.parseInt(); 

要修改的輸出,但是從我收集的產量預計是這樣FFR55。

0

嘗試使代碼分割兩個部分:

int numbers = Integer.parseInt(string.replaceAll("[^0-9]", "")); 
String chars = string.replaceAll("[0-9]", "").toUpperCase(); 
int char0Index = ((int) chars.charAt(0)) - 65; 
int char1Index = ((int) chars.charAt(1)) - 65; 

此代碼的可變numbers,保持所述輸入串的數部分的指數,以及char0Indexchar1Index,保持的值0-25的兩個字符。

您可以添加這兩個字符,或者使用字符作爲行和列的數字,或者任何您需要的。