我需要从文本文件中读取每一行,并首先根据长度对其进行排序,然后将其在原始文档中的位置,然后再将这些行添加到链表中。
然后必须逐行打印出列表的内容,前缀指示正在打印的行号,以及该行上有多少非空格字符。
下面是一个示例 I/O:
Input (i.e. contents of text file)
this
is
just
a
test
Output
1/1: a
2/2: is
3/4: this
4/4: just
5/4: test
我需要从文本文件中读取每一行,并首先根据长度对其进行排序,然后将其在原始文档中的位置,然后再将这些行添加到链表中。
然后必须逐行打印出列表的内容,前缀指示正在打印的行号,以及该行上有多少非空格字符。
下面是一个示例 I/O:
Input (i.e. contents of text file)
this
is
just
a
test
Output
1/1: a
2/2: is
3/4: this
4/4: just
5/4: test
您需要使用文件和扫描仪。代码看起来像这样:
import java.io.*;
import java.util.scanner;
public class ReadAndWrite {
public static void main(String[] args) throws IOException {
Scanner scan = new Scanner(new File("yourfile.txt"));
int i = 1;
while(scan.hasNext()) {
String s = scan.nextLine();
System.out.println("Line " + i + " says " + s + " and has " + s.length() + " characters.";
i++;
}
System.out.println("/nNo more lines in the file.");
}
}
我不会为您解决问题,而是为您提供各种链接,这些链接将帮助您解决任务。
1) 在JAVA中读取文件
2) 可以对读取的字符串执行的各种字符串操作:字符串操作
3) 使用比较器对 JAVA 中的集合进行排序:集合排序
使用 Comparator 排序 - 首先按长度,然后使用三元运算符按行 pos(从 hashMap 中获取)。
行上有多少个非空格字符:使用 "s+" 分割行。使用 for 循环添加所有子数组的长度。
从 arraylist 打印时,打印 count + nonSpaceChars in line + line 。
希望这已经足够了
import java.util.*;
import java.io.*;
public class HelloWorld{
public static class mystruct {
public String line;
public int number;
public mystruct(String line, int count) {
this.line = line;
this.number = count;
}
}
public static void main(String []args){
LinkedList<mystruct> list = new LinkedList<mystruct>();
mystruct temp;
int count=0;
try{
FileInputStream fstream = new FileInputStream("input.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String readline;
while ((readline = br.readLine()) != null) {
count++;
temp = new mystruct(readline, count);
list.add(temp);
}
in.close();
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
Collections.sort(list, new Comparator<mystruct>() {
public int compare(mystruct o1, mystruct o2) {
if (o1.line.length() != o2.line.length())
return (o1.line.length() - o2.line.length());
else {
return (o1.number - o2.number);
}
}
});
for (int i = 0; i < list.size(); i++) {
temp = list.get(i);
System.out.println(temp.line);
}
}
}