2013-10-13 28 views
-1

我試圖創建一個代碼,它需要一個文本文件並將其按字母順序排列。爲此,我試圖讀取文件並將每個單詞添加到數組中。我對如何去做這件事有一個想法,但並不確切地知道。以下是我迄今爲止:需要把每個字符串從一個文本文件放入一個數組

import java.io.*; 
import java.util.Scanner; 

public class assignment4 { 
    public static void main(String[] args) throws IOException { 

     if (args.length == 1){ 
      createArray(args[0]); 
      System.exit(0); 
     } 

    } 


    public static String createArray(String fileName) { 
      File testFile = new File(fileName); 
    Scanner inputFile = new Scanner(testFile); 

    if (!testFile.exists()){ 
    System.out.println("File Doesn't Exist"); 
    System.exit(0); 
    } 

    String[] words; 

    while(inputFile.hasNext()){ 
    for (int i=0;i<inputFile.length();i++){ 
    words[i] = inputFile.nextLine(); 
    } 
    } 

    return words[0]; 

    } 
} 

我知道大多數可能是完全錯誤的,但我很困惑這方面的工作,現在4小時...

+0

那麼,究竟是你的問題? – Prateek

回答

0

ArrayList的話=新的ArrayList( ); while(inputFile.hasNextLine()){ String word = inputFile.getNextLine(); words.add(word); }

既然你不知道這是多大,你應該使用arrayList。然後,您可以按字母順序或任何需要進行排序。

+0

我們還沒有學會如何在我們的課堂上使用ArrayList – Mike

+0

好的。您應該將其標記爲HW ...您可以對數組執行相同的操作,但您需要知道您將擁有多少個字符串。你的代碼中的主要問題是你永遠不會增加i,所以你只需重複寫一遍又一遍,最後只需要一個字符串。此外,它一次只讀取一行,您需要將字符串拆分爲字符串數組,然後將這些字詞添加到主數組中。 –

+0

好的。我添加了一個for循環來增加我,但我不知道inputFile.length()是否正常工作。我還能找出文件中有多少單詞? – Mike

2
words[i] = inputFile.nextLine(); 

在這裏,你正試圖從輸入文件的下一行存儲到words數組的索引i。您尚未向i聲明或分配值,因此Java不會知道您要做什麼。

對於標準數組,您必須爲它們分配一個初始數組值,該值包含顯式數目的「槽」(索引)。使用Scanner,您可以通過全部讀取並丟棄這些值來計算行數。一旦你有這個計數器,你可以用適當的大小初始化String[]。最後,您可以再次讀取它們並將它們存儲到數組中。

int counter = 0; 

while (inputFile.hasNext()) { 
    inputFile.nextLine(); 
    counter++; 
} 

inputFile = new Scanner(testFile); //to get to the beginning of the file 

String[] words = new String[counter]; 

for (int i = 0; i < counter; i++) { 
    words[i] = inputFile.nextLine(); 
} 

這是非常不好的做法;閱讀整個文件僅僅是爲了找到它的長度是一個矯枉過正和浪費資源。

因此,使用集合類型會更好,該集合類型會在您將元素放入元素時自動擴展,例如ArrayList

ArrayList<String> lines = new ArrayList<String>(); 

while (inputFile.hasNext()) { 
    lines.add(inputFile.nextLine()); 
} 

但它可能是你分配需要你同時使用Scanner和標準String[]。在這種情況下,你可以手動更改的String[]的大小:

String[] words = new String[0]; 

while (inputFile.hasNext()) { 
    words = Arrays.copyOf(words, words.length + 1); 
    words[words.length - 1] = inputFile.nextLine(); 
} 

String[] words = new String[0]; 

while (inputFile.hasNext()) { 
    String temp = new String[words.length + 1]; 
    System.arraycopy(words, 0, temp, 0, words.length); 
    temp[temp.length - 1] = inputFile.nextLine(); 
    words = temp; 
} 
+0

我應該返回什麼? – Mike

+0

@MikeOles你的方法聲明('public static String createArray(String fileName)')指出Java應該期望方法返回一個'String'。然而,如果你希望在你的'main'方法中對數組進行排序,你會想要返回一個String []或ArrayList (如果你使用'ArrayList'的例子)。不要忘記相應地更新你的方法聲明。如果你決定返回一個String [],你應該使用'return words;'。 – Spooky

相關問題