2015-10-06 2 views
1

, имеющий немного проблемы. Я перекручивание через файл, где от Я хочу, чтобы отфильтровать серию текстов и объединить их в конце каждого цикла, который затем в конечном счете, в конечном итоге заказ т.е. во время фазы петли она делает следующее:Попытка объединить ряд строк через массив

String A = "A /n" 
String A = "A /n U /n" 
String A = "A /n U /n B /n" 

и т.д. ...

Вывод будет

U

В

однако я хочу, чтобы это было

B

U

Я до сих пор сделано следующее: выход

public static void organiseFile() throws FileNotFoundException { 
    ArrayList<String> lines = new ArrayList<>(); 
    ArrayList<String> order = new ArrayList<>(); 
    String directory = "C:\\Users\\xxx\\Desktop\\Files\\ex1"; 
    Scanner fileIn = new Scanner(new File(directory + "_ordered.txt")); 
    PrintWriter out = new PrintWriter(directory + "_orderesqsd.txt"); 
    String otherStates = ""; 

    while (fileIn.hasNextLine() == true) { 
     lines.add(fileIn.nextLine()); 
     System.out.println("Organising..."); 
    } 
    Collections.sort(lines); 
    for (String output : lines) { 
     if (output.contains("[EVENT=agentStateEvent]")) { 
      out.println(output + "\n"); 
      out.println(otherStates + "\n"); 
      otherStates = ""; 
     } 
     else { 
     otherStates += output+ "\n";  
    } 
    out.close(); 
} 

Теперь это хорошо, однако , что касается «otherStates», я хочу получить это в числовом порядке, и лучший способ, который я знаю, - использовать Коллекции, однако is для массивов. Я не уверен, как перейти к модификации части «otherStates» кода, чтобы обслуживать массив, который объединяет строку и затем сможет их упорядочить. Любые идеи

+0

Ваш вопрос очень неясен - «я хочу получить это в определенном порядке» не объясняет, какой заказ вы хотите вообще. Почему вы собираете 'otherStates' как одну строку, а не как какую-то коллекцию? Если вы хотите изменить порядок вещей, соберите все элементы в виде коллекции, закажите их и * затем * соедините их вместе ... –

+0

Вот где я боюсь. Я знаю, что otherStates необходимо изменить из строки в массив, поэтому я могу заказать ее с помощью collection.sort. У меня есть массив под названием «порядок», но я не могу просто заменить «otherStates» на «order». –

+1

У вас нет массивов. У вас есть ArrayLists. Это не одно и то же. Но вы можете создать третий ArrayList для 'otherStates' и добавить к нему вместо использования конкатенации строк - что мешает вам сделать это? –

ответ

1

Трудно дать правильное решение без входных данных файла. Просто попробуйте приведенный ниже код. По крайней мере, он должен дать вам несколько идей о том, как решить проблему.

public static void organiseFile() throws FileNotFoundException { 
ArrayList<String> lines = new ArrayList<>(); 
ArrayList<String> order = new ArrayList<>(); 
String directory = "C:\\Users\\xxx\\Desktop\\Files\\ex1"; 
Scanner fileIn = new Scanner(new File(directory + "_ordered.txt")); 
PrintWriter out = new PrintWriter(directory + "_orderesqsd.txt"); 

String otherStates = ""; 
ArrayList<String> otherStates_duplicate = new ArrayList<>(); 
String ordered_new_string.; 

while (fileIn.hasNextLine() == true) { 
    lines.add(fileIn.nextLine()); 
    System.out.println("Organising..."); 
} 
Collections.sort(lines); 
for (String output : lines) { 
    if (output.contains("[EVENT=agentStateEvent]")) { 
     out.println(output + "\n"); 
     out.println(otherStates + "\n"); 
     otherStates = ""; 
    } 
    else { 
    otherStates += output+ "\n"; 
    otherStates_duplicate.add(output); 

} 
Collections.sort(otherStates_duplicate); // Now this should have a sorted list 

//if you need a string instead of an arraylist use code below in addition 
for(String s:otherStates_duplicate){ 

ordered_new_string += s + "\n"; 

} 

/* 
I have not printed or stored the string ordered_new_string as it is not 
clear to me what you want. print/write to a file and check 
if ordered_new_string is what your required 

*/ 

out.close(); 
}