2014-02-27 105 views
0

我已經完成了此操作,但現在遇到了另一個問題。我想提取末尾的數字「作業1:89」,它位於.txt文件中。正如我說的,我通常使用「.replaceAll(」[\ D]「,」「)」*。但如果我這樣做了,冒號前的數字(例如1)仍然存在......我看不到任何解決方案。替換爲空格

它應該是這樣的:

 while (dataSc.hasNextLine()) { 
       String data = dataSc.nextLine(); 
       ArrayData.add(i, data); 

     if (data.contains("Homework ")) { 
      idData.add(a, data); 
      idData.set(a, (idData.get(a).replaceAll("[\\D]", ""))); 

輸出中,一個新的字符串,就 「89」 ......

+0

你可以編輯你的問題與你的嘗試代碼,輸入,輸出和預期的輸出請。如果你這樣做,我們可以提供更多的幫助。謝謝 如果我明白你想要什麼,你可以簡單地用「:」分隔,得到第二個標記。如果line =「Homework 1:89」,那麼你可以做'line.split(「:」)',它將成爲返回數組的第二個元素。 – TheOneWhoPrograms

+0

我認爲你應該看看正則表達式,因爲它們可能是你功課的重要部分:http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html #sum – Andy

回答

2

感謝編輯你的問題。

如果你只是試圖讓但凡有字作業結束時,你可以在統一的格式指望你能做到以下幾點:

String[] tokens = data.split(": "); 
System.out.println(tokens[1]); 

所以,如果你看着你的代碼,你會想要把它放在你的if語句中,你只想從數據中得到冒號後面的數字。

什麼代碼會將您的字符串分解爲多個組件,每當它看到「:」時都會將其破壞。

在你的榜樣 「作業1:89」 它會破壞你的數據分成兩個 「令牌」:

1: 「作業1」

2: 「89」

所以當訪問令牌陣列我們訪問變量tokens[1]因爲索引從0開始

+0

嗯,我看到背後的邏輯,但我有點失落......我到底需要把第一行放在哪裏。我想這是通用代碼,對吧? – Heneko

+0

@Heneko擴大我的答案,讓我知道是否足夠。 – TheOneWhoPrograms

+0

嗯..所以我需要做的是使用你的一段代碼,併發送令牌[1]到ArrayList我想存儲的值, array.add(令牌[1]), – Heneko

0

以下代碼使用

1) String str="Homework 1: 89"; 
     str = str.replaceAll("\\D+",""); 
     2) String str="sdfvsdf68fsdfsf8999fsdf09"; 
      String numberOnly= str.replaceAll("[^0-9]", ""); 
     System.out.println(numberOnly); 
+0

它如何解決OP問題?這與OP現在所做的完全一樣。您只需將'[\\ D]'重寫爲'\\ D'或'[^ 0-9]',在這種情況下表示相同。 – Pshemo