java - (Java文本处理)文本排序方法,结果为null?

标签 java sorting io text-processing

我正在尝试制作自己的文本二进制排序方法,虽然我成功编译了它,但它并没有真正完成排序工作并返回空值。有人可以帮忙指出问题吗?非常感谢!!

类合并排序{

//main method
public static void main(String [] args) throws IOException{

    String [] words = readWords(args[0]);

    long t1 = new Date().getTime();
    mergesort(words);
    long t2 = new Date().getTime();
    System.out.println("execution time:" + (t2 - t1) + " milliseconds");

    prWords(words);
}

//method for reading file
public static String [] readWords(String fn)throws IOException{

    BufferedReader br = new BufferedReader(new FileReader(fn));
    String line = "";
    StringBuilder allwords = new StringBuilder();
    while ((line = br.readLine())!= null){
        String [] items = line.trim().split("\\s+");
        allwords.append(convertCase(items[0])+"\t");
        }
        br.close();
        return allwords.toString().split("\t");
}

//Convert Case method
public static String convertCase(String n){ 

        String firstWd = n;         
        firstWd = n.charAt(0) + n.substring(1).toLowerCase();

        return firstWd;
}

public static String [] sortedWs = {};
public static void mergesort(String [] Ws){
    sortedWs = new String[Ws.length];
    mergesort(Ws, 0, Ws.length);
}

public static void mergesort(String [] Ws, int bgn, int end){
    if (end - bgn == 1) return;
    int mid = (bgn+end)/2;
    mergesort(Ws, bgn, mid);
    mergesort(Ws, mid, end);
    merge(Ws, bgn, end);
}

public static void merge(String [] Ws, int bgn, int end){

    int mid = (bgn+end)/2;
    int b1 = bgn;
    int b2 = end;

    int x = 0;

    while (b1 < mid && b2 < end) {
        if (Ws[b1].compareTo(Ws[b2]) <= 0){
            sortedWs[x] = Ws[b1]; b1++; x++;
        } else {
            sortedWs[x] = Ws[b2]; b2++; x++;
        }
    }
    //copy the rest
    if (b1 >= mid)
        while (b2 < end) { sortedWs[x] = Ws[b2]; b2++; x++; }
    if (b2 >= end)
        while (b1 < mid) { sortedWs[x] = Ws[b1]; b1++; x++; }

    for(int i = 0; i < end-bgn; i++) {
        Ws[bgn+i] = sortedWs[i];
    }

}

public static void prWords(String [] strs){

    for (String x : strs){
    System.out.println(x);
    } 
}

最佳答案

merge() 中的这一行:

    int b2 = end;

我认为应该是:

    int b2 = mid;

通过此更改,几次测试运行在我的计算机上给出了正确的结果。

关于java - (Java文本处理)文本排序方法,结果为null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40268420/

相关文章:

java - 如何从 jar 下的相对路径获取 URL?

java - 在IDEA中,如何为新类型生成javadoc?

c# - 如何在 Unity 中高效地对大量 RGB 颜色进行排序

c - 如何防止编译器优化内存访问基准 read() vs mmap() 性能?

java - 扫描文件中的给定数字 - Java

c# - 寻找在 C# 中快速读取和搜索文件的方法

java - 基本 Java 程序给出错误的输出

java - jar 内的 NoClassDefFoundError

c# - ObservableCollection 键上的排序扩展方法

java - 如何对 ArrayList 进行排序?