【发布时间】:2021-07-01 00:48:54
【问题描述】:
所以我正在编写一些代码,该代码采用未排序的文件,并按字母顺序仅在新文件中写出游戏名称。
这是原始文件的样子:
04/26/16 Sega 3D Classics Collection
07/14/16 Batman: Arkham Underworld
06/24/16 Tokyo Mirage Sessions #FE
这是新文件的所需内容
Batman: Arkham Underworld
Sega 3D Classics Collection
Tokyo Mirage Sessions #FE
我的代码由于某种原因取出第一个单词并对其进行排序的问题。 (例如,而不是 Batman: Arkham Underworld 它将是 Arkahm Underworld )。我尝试的是从 indexOf(" ") 和我的方法的 info.length 中减去 1,但这似乎不起作用。我确信该方法和文件的写入工作但第一个单词丢失广告将使用没有第一个单词的字符串排序。我不太确定这段代码的问题出在哪里
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("releasedates.txt");
String[] arr = input(file);
sortByName(arr);
}
public static String[]input (File file) throws FileNotFoundException{
String[]arr = new String[3];
Scanner sc = new Scanner(file);
for(int i = 0; i < arr.length; i++){
arr[i] = sc.nextLine();
}
return arr;
}
public static void sortByName(String[] info) throws IOException {
String[] names = new String[3];
for (int i = 0; i < info.length; i++) {
names[i] = info[i].substring(info[i].indexOf(" "), info[i].length());
}
String temp;
for (int j = 0; j < names.length; j++) {
for (int i = j + 1; i < names.length; i++) {
if (names[i].compareTo(names[j]) < 0) {
temp = names[j];
names[j] = names[i];
names[i] = temp;
}
}
}
FileWriter writer = new FileWriter("SortedByName.txt");
for (String aString : names) {
writer.write(aString);
}
writer.close();
}
}
【问题讨论】:
-
日期和标题之间的“空格”...是多个空格还是一个制表符
0x09字符?这将完全解释您所看到的行为。 -
@JimGarrison 日期和名称之间的间距是制表符间距
-
那么,您正在寻找一个空格字符并直接跳过制表符到第一个“真实”空格 (
0x20) 字符。如果您可以保证它始终是一个选项卡,请更改indexOf参数。如果没有,请改用split(regex,limit)(限制为 2)。
标签: java loops file input methods