2013-12-08 39 views
1

所以我在我的任務中遇到了一些麻煩。我似乎無法弄清楚我需要做什麼。這裏是一個問題:字符串方法java任務

閱讀積分的分配基礎如下:前三本書每本價值10分。接下來的三本書每本都值15分。所有讀過六本書的書都各得20分。一個讀7本書的學生將被授予95分(前三名加30,後三名加45,第七本爲20)。

一個外部文件中包含一個姓氏和名字,然後一個整數(圖書的數量讀取)

打印在每個人的名字,圖書的數量讀取,並獲得積分。名字應該是最後的順序,首先是所有大寫字母中的唯一姓。在列表底部打印出所有讀者和比賽獲勝者的平均積分。

語句所需:輸入,輸出,決策,環控制,字符串

數據位置:prog700c.dat

樣本輸出:

Reading Contest 

Name  Books Points 

SUMMER Sam 4  45 

LAZY Linda 2  20 

PRODDER Paul 5 60 

MASTER K.C. 8 115 

READER Richie 6 75 

Average points per reader = 63.0 
The winner of the contest is K.C. Master 

外部文件數據是這樣的:

SUMMER Sam 4 

LAZY Linda 2 

PRODDER Paul 5 

MASTER K.C. 8 

READER Richie 6 

我的當前代碼:

import java.io.*; 
import java.util.*; 
public class Prog505a 
{ 
    public static void main(String[] args) 
    { 
     Scanner kbReader = new Scanner(new File("C:\\Users\\Guest\\Documents\\java programs\\Prog700c\\Prog700c.in")); 
    String data = kbReader.nextLine(); 
    while(kbReader.hasNextLine()) 
    { 

我遇到一個問題,我不知道用什麼字符串方法只從外部文件中獲取數字以便在計算中使用它們。我知道我可以做決策等,但我只是不知道該如何處理這一部分,以便只從外部文件中獲取數字。如果有人能提供某些方向或指導,將不勝感激。謝謝!

+1

您需要解析字符串並提取您需要的值。你可以使用正則表達式。 –

+0

Integer#parseInt(String)應該有幫助。 HTTP://文檔。oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String) – blackpanther

+1

由於您使用[Scanner](http://docs.oracle.com/javase/) 7/docs/api/java/util/Scanner.html),您可以使用它的方法[hasNexInt](http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNextInt ())和[nextInt](http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt())來獲得解析的整數,爲姓和名可以'hasNext'和'next'。 – A4L

回答

2

您可以使用String.split("\\s+")將該行分成三部分(檢查它們是否是三個部分以確保不打印警告,如果不是則跳過)。這將返回一個字符串數組。您可以使用Integer.parseInt()來讀取數組中第三項圖書的數量(位置2,Java中的數組「基於零」)。

請注意,"\\s+"是一個正則表達式,它可以找到一個或多個空白部分。空白字符串和字符串的開始/結尾處的字符串被返回。如果不允許正則表達式,請嘗試查找字符串中空格字符的索引,並使用String.substring() - 並且不要忽略字符串操作的返回值。

或者,您可以在掃描儀中使用next(),next()nextInt()而不是nextLine()

+0

我的答案有什麼問題嗎?請在我的或Doroskevics的答案中指出缺少或點擊接受。 –

0

你可以使用正則表達式來提供你在說什麼: 嘗試使用類似:

str = str.replaceAll("\\D+",""); 

這樣,您將刪除所有非數字的字符串。之後,您需要將字符串解析爲整數或任何其他數字類型。

+0

這會起作用,但我不確定這個解決方案是否是一個好的解決方案。想象一下,如果後續問題將由包含「READER Dorosckevic(1)4」的行組成......換句話說,它不會縮放。 –

+0

我會創建一個額外的字符串來保存該數據並對該特定字符串進行操作。 –

+0

這是一個很好的橫向思維 - 在編程期間這可能非常重要 - 但有時它與良好的問題分解相反。首先分裂成單獨的元素似乎是要走的路... –