2015-09-06 6 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 третьей строкой. Я сохраню строку string3 и т. Д.

- их любой способ сделать это. мой 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, Agent1 РФ 2 0

line1, agent2 РБ 4 5

строка2, Agent4 CE 2 2

line3, Agent3 РФ 3 11

для печати в файле добавить это:

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 Agent1 RF 2 0 (NEWLINE я не знаю, как дать новую строку в комментарии, я нажимаю на ввод комментария порта) Agent4 CE 2 2 (NEWLINE) Agent3 RF 3 11 (NEWLINE) Agent2 RB 4 5 (NEWLINE) – 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. 

Преобразование List из Strings в String массива и использовать метод 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

bro, у меня есть целое значение в именах, и я могу использовать каждую строку, используя names.get (0) для первой строки name.get (1) для второй строки, но все же мне нужно ее где-то сохранить, мой мотив состоит в том, чтобы перестроить линию в соответствии со вторым последним элементом каждой строки. – Nav

+0

Я действительно хочу, чтобы это было сохранено в файле output.txt Agent1 RF 2 0 (NEWLINE я не знаю, как дать новую строку в комментарии, я нажимаю на ввод комментария порта) Agent4 CE 2 2 (NEWLINE) Agent3 RF 3 11 (NEWLINE) Agent2 RB 4 5 (NEWLINE) – Nav

+0

Обновлен код. пожалуйста, проверьте. – YoungHobbit

Смежные вопросы