Мой вопрос на самом деле двоякий, но сначала я пытаюсь написать программу, которая сортирует список по алфавиту и записывает его в файл, но при попытке отсортировать файл, в тот момент, когда строки со специальными символами или числамивведено, сортировка больше не работает.Если список - это просто строки, начинающиеся с букв, он сортируется и записывается совершенно нормально и по порядку.
Я просто использую Collections.sort
в списке строк, который состоит из строк входного файла,и затем я пытаюсь записать их в выходной файл.
Мой входной файл содержит следующие строки:
These are some test lines
short line
abcdefghij
this line is much longer than the short line
123 456
#Ignore this line
Blah blah blah
# ignore this, too
, и мой выходной файл заканчивается сортировкой по:
# ignore this, too
#Ignore this line
123 456
Blah blah blah
These are some test lines
abcdefghij
short line
this line is much longer than the short line
Что касается второго вопроса, я бы хотелкаким-то образом исключить строки, которые с #, записываются в файл.Вот код, который у меня есть:
BufferedReader inputStream = null;
PrintWriter outputStream = null;
String inFile = args[0];
String outFile = args[1];
List<String> lines = new LinkedList<>();
try {
inputStream =
new BufferedReader(new FileReader(inFile));
outputStream=
new PrintWriter(new FileWriter(outFile));
String line;
while ((line = inputStream.readLine()) != null) {
lines.add(line);
if(args[2].equals("LONGESTFIRST") ) {
Collections.sort(lines, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.length() - o1.length();
}
});
} else if (args[2].equals("SHORTESTFIRST")) {
Collections.sort(lines, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
});
} else if (args[2].equals("LEXICOGRAPHIC")) {
Collections.sort(lines);
} else if (args[2].equals("REVERSE")) {
Collections.sort(lines, Collections.reverseOrder());
}
}
for (int i = 0; i < lines.size(); i++) {
outputStream.println(lines.get(i));
}
Я пробовал что-то вроде включения строки с последней по последнюю в операторе if, например if(!lines.startsWith("#") {
... но, к сожалению, это не работает.
Кстати, простите за стену текста!