从文本文件中读取行并将它们排序为链接列表java

时间:2013-09-23 11:42:11

标签: java sorting file-io linked-list comparable

我需要从文本文件中读取每一行,然后首先根据长度对其进行排序,然后在将行添加到链接列表之前将其放在原始文档中。

然后必须逐行打印列表的内容,前缀表示正在打印的行号,以及行上有多少个非空格字符。

以下是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

4 个答案:

答案 0 :(得分:2)

您需要使用文件和扫描仪。代码看起来像这样:

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 :(得分:1)

我会为您提供各种链接,帮助您解决问题,而不是为您解决问题。

1)Readinga file in JAVA

2)可以对字符串执行的各种字符串操作:String operations

3)使用隔离专区对JAVA中的集合进行排序:Collection sorting

答案 2 :(得分:1)

  1. 我需要从文本文件中读取每一行:使用FileReader和BufferedReader
  2. 首先根据长度对其进行排序,然后在将行添加到链接列表之前将其放在原始文档中:使用原始文档的(String,lineNo)创建HashMap。
  3. 使用Comparator排序 - 先按长度排序,然后按行pos(从hashMap获取)使用三元运算符。

  4. 该行上有多少个非空格字符:使用“s +”拆分该行。使用for循环添加所有子数组的长度。

  5. 从arraylist打印时,在行+行中打印计数+ nonSpaceChars。

  6. 希望这就足够了

答案 3 :(得分:1)

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);
        }      
     }
}