2015-09-06 59 views
2

的號碼,如果有人能幫助我,請在Java程序中,我曾文件名爲「input.txt中」,其中包含文本像行數等於名字

Agent1 R F 2 0 
Agent2 R B 4 5 
Agent4 C E 2 2 
Agent3 R F 3 11 

我要保存所有的行不同的變量,並在他們的工作。 在這裏說我想將第一行保存到字符串中,我將其稱爲line1,第二行保存在字符串中,稱爲line2第三行,我將保存在名爲line3的字符串中,依此類推。

是他們的任何方式來做到這一點。我的txt文件可以有任何數量的行,我想保存這些行,因爲字符串在它們上面工作。

簡單地說,我需要一個類似於循環的東西,它將繼續改變變量的名稱。但我不知道該怎麼做。

這裏是我的代碼至今而是輸出我要救行作爲任何數據類型

真的很感激任何幫助的字符串。

+0

你能告訴工作/代碼你做了到現在爲止? –

+2

「我想將所有行保存在不同的變量中」 - 聽起來你應該真的使用「列表」,例如'ArrayList'。 –

+0

@JonSkeet OHMYGOD !!!看看是誰吧! –

回答

1

試試這個。

public static Map<String, String> loadFile(Reader reader) 
     throws IllegalArgumentException{ 
    Map<String, String> mapList = new TreeMap<String, String>(); 
    if(reader == null) 
    { 
     throw new IllegalArgumentException("Reader not valid"); 
    } 
    String line; 
    innerReader = new BufferedReader(reader); 
    int countLine = 0; 
    try 
    { 
    while((line = innerReader.readLine()) != null) 
    { 
     if (line == null || line.trim().isEmpty()) 
      throw new IllegalArgumentException(
        "Line Empty"); 
     mapList.put("line"+String.valueOf(countLine), line); 
     countLine++; 
    } 
    } catch (IOException e) { 
    } 
    return mapList; 
} 

在主要添加此嘗試您的代碼。

Map<String, String> mapList = new TreeMap<String, String>(Collections.reverseOrder()); 
    try { 
     mapList = loadFile(new FileReader("YourFile.txt")); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    for (Map.Entry entry : mapList.entrySet()) { 
     System.out.println(entry.getKey() + ", " + entry.getValue()); 

}

安,這是輸出。

line0,劑1 RF 2 0

行1,Agent2 RB 4 5

LINE2,劑4 CE 2 2

line3中,Agent3 RF 3 11

對於打印out in file add this:

private static PrintWriter innerWriter; 
public static void printMap(Map<String, String> myMap, Writer writer) 
      throws IOException { 
     if(writer == null) 
     { 
      throw new IOException("Cannot open file"); 
     } 
     innerWriter = new PrintWriter(writer); 
     for (Map.Entry entry : myMap.entrySet()) { 
      innerWriter.write(entry.getKey() + ", " + entry.getValue() + "\n"); 

     //OR THIS FOR ONLY VALUES 
     // innerWriter.write(entry.getValue() + "\n"); 

     } 
     innerWriter.close(); 
    } 

,這對主要

try { 
     printMap(mapList, new FileWriter("FileOutput.txt")); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
+0

在名稱中的整個值,我可以訪問每行使用names.get(0)爲第一行name.get(1)爲第二行,但仍然我必須將它保存在某處,我的動機是重新排列行按照第二行每行的最後一個元素。我想其實像這樣被保存在output.txt的文件劑1 RF 2 0(NEWLINE我不知道如何給在評論我按下進入I端口註釋新行) 劑4 CE 2 2(行) Agent3 RF 3 11 (新行) Agent2 RB 4 5(行) – Nav

+0

我編輯的代碼,享受@Nav –

+0

感謝隊友的編輯,但我認爲它會把相同的輸入文件到輸出文件,但有可能有輸出文件中的行根據每行的第二個最後一個元素進行排序,並將排序後的行放入輸出文件中。 – Nav

1

你不能在動態創建變量,如通過更改名稱剛纔提到。您可以使用List來存儲文件中的數據並稍後處理。

File file = new File("input.txt"); 
Scanner scanner = new Scanner(file); 
List<String> names = new ArrayList<String>(); 
while (scanner.hasNext()) { 
    String line = scanner.nextLine(); 
    names.add(line); 
} 
// Now all the lines from the file are stored in the list. 
// You can do the processing you need to do. 

轉換的StringsListString陣列,並使用Arrays.sort方法用於排序的陣列。我們將根據我們的需要提供自定義Comparator排序陣列。

String nameArray[] = names.toArray(new String[names.size()]); 
Arrays.sort(nameArray, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
    String array1[] = o1.split(" "); 
    String array2[] = o2.split(" "); 
    return array1[3].compareTo(array2[3]); 
    } 
}); 

這裏的假設是線將始終包含五個元素,我們在符合行第四位置編號排序。


輸出:

Agent1 R F 2 0 
Agent4 C E 2 2 
Agent3 R F 3 11 
Agent2 R B 4 5 
+0

兄弟,我已經得到了名字的全部價值,我可以使用names.get(0)對於第一行name.get(1),但仍然需要將它保存到某處,我的動機是根據每行的第二個元素重新排列行。 – Nav

+0

其實我是想這樣被保存在output.txt的文件劑1 RF 2 0(NEWLINE我不知道如何給在評論我按下進入I端口註釋新行) 劑4 CE 2 2(行) Agent3 RF 3 11(NEWLINE) Agent2 RB 4 5(NEWLINE) – Nav

+0

更新了代碼。請檢查。 – YoungHobbit