【问题标题】:Sort contents of file in alphabetical order into a new file using methods (Java)使用方法(Java)按字母顺序将文件内容排序到新文件中
【发布时间】:2021-06-29 23:26:38
【问题描述】:

所以我正在尝试编写一些代码来找到一种对现有文本文件进行冒泡排序的方法,我以数组的形式收集了信息,它看起来像这样:

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

问题是我不知道如何删除它最初属于的字符串的日期。我认为应该有某种函数,如 javascript 中的 indexOf() 。我会假设在提取名称之后。然后排序将与我为日期排序所做的排序相同。

这是我做的代码:

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("C:/Users/cyrus/Downloads/Lab 11/releasedates.txt");

    String []arr = input(file);

    output(file,arr);

    outputSort1(file, 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 output(File file, String[] info) throws IOException{

    FileWriter writer = new FileWriter("C:/Users/cyrus/Downloads/Lab 11/fileName.txt");
    for(String aString:info){
      writer.write(aString);
    }
    writer.close();
  }

  public static void sortByMonth(String[]info){

    String temp;

    for (int j = 0; j < info.length; j++) {
      for (int i = j + 1; i < info.length; i++) {
 
  if (info[i].compareTo(info[j]) < 0) {
    temp = info[j];
    info[j] = info[i];
    info[i] = temp;
        }
     }
    }
  }

  public static void outputSort1(File file,String[] info) throws IOException{
    sortByMonth(info);
    FileWriter writer = new FileWriter("C:/Users/cyrus/Downloads/Lab 11/fileNameSorted1.txt");
    for(String aString:info){
        writer.write(aString);
    }
    writer.close();
}

public static void sortByName(String[]info){
//this isn't really finished, I am unsure on how to extract JUST the name of the games
}
}

【问题讨论】:

    标签: java loops file sorting methods


    【解决方案1】:

    有几种方法可以对行进行排序。假设您将所有行放在一个列表中并对该列表进行排序,在排序之前,您还删除了日期。 使用 Java Stream 8

    List<String> lines = Arrays.asList("04/26/16  Sega 3D Classics Collection",
                    "07/14/16  Batman: Arkham Underworld",
                    "06/24/16  Tokyo Mirage Sessions #FE");
            
            List<String> newLines = lines.parallelStream()
                    .map(line-> line.substring(line.indexOf(" ")))
                    .sorted((line1, line2)->line1.compareTo(line2))
                    .collect(Collectors.toList());
    newLines.forEach(System.out::println);
    

    【讨论】:

      猜你喜欢
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多