Arrays.sort无法按预期工作

时间:2014-09-06 13:03:15

标签: java arrays sorting char

我应该对char数组进行排序并按降序打印。应该很简单,但是,我没有得到我想要的输出。互联网上的所有解决方案告诉我Arrays.sort可以使用,但我应该使用另一种方法吗?或者我忽略了什么?

public class mainClassTextFile {

public static void main(String[] args) throws IOException {
    FileReader fileReader = new FileReader("file.txt");    
    String fileContents = "";
    int i;
    int loopcount = 0;
    int count = 0;

    while((i = fileReader.read())!=-1){
        char ch = (char)i;
        fileContents = fileContents + ch;
    }
    char[] ch=fileContents.toCharArray();

    for(int n = 0; n < ch.length; n++) {
        boolean addCharacter=true;
        for(int t = 0; t < n; t++) {
            if (ch[n] == (fileContents.charAt(t)))
            addCharacter=false;
            }
            if (addCharacter) {
                for(int j = 0; j < fileContents.length(); j++) {
                    if(ch[n]==fileContents.charAt(j))
                    count=count+1;
                }
                Arrays.sort(ch);
                System.out.print(ch[n] + ": "+(count));
                System.out.println();
                count=0;
                loopcount++;
            }
    }

}   
}

输出应该是文本中的所有字符,计算和排序,但这是结果:

:3339

X:4

X:4

X:4

X:4

[:2

]:2

如果我// Arrays.sort()那么我会正确计算文本文件中的所有字符,但它们既没有排序也没有按降序排列!

2 个答案:

答案 0 :(得分:0)

你的for循环对我来说真的没有意义但是如果你想从文件中读取字符串将int转换为char数组并对它进行排序你可以这样做

FileReader fileReader = new FileReader("yourFile.txt");
StringBuilder br = new StringBuilder();
while(true){
    int ch = fileReader.read();
    if(ch==-1)
        break;
    char chArr = (char)ch;
    br.append(chArr);
}
char[] ch=br.toString().replaceAll("\\s+", "").toCharArray(); //removed all spaces
System.out.println(Arrays.toString(ch));
Arrays.sort(ch);
System.out.println("After sorting : "+Arrays.toString(ch)); // ascending order
for(int i = ch.length - 1; i >= 0; i--) 
      System.out.println(arr[i]);                          //descending order

答案 1 :(得分:0)

你的代码有很多错误,包括概念错误;因此,我没有详细解释如何纠正它,而是提交有效的代码,我尝试将其与您的代码类似:

public static void main(String[] args) throws IOException {
  final String fileContents;
  try (Scanner sc = new Scanner(new File("file.txt"))) {
    fileContents = sc.useDelimiter("\\Z").next();
  }
  final char[] ch = fileContents.toCharArray();
  Arrays.sort(ch);
  int prevChar = -1, count = 0;
  for (int i = 0; i < ch.length; i++) {
    if (ch[i] != prevChar) {
      if (count > 0) System.out.println((char)prevChar + ": "+count);
      count = 1;
      prevChar = ch[i];
    } else count++;
  }
  if (count > 0) System.out.println((char)prevChar + ": "+count);
}

请注意,我冒昧地完全更改了例程,将整个文件作为String加载。这是因为我认为文件阅读是一个侧面问题。

循环通过遍历排序数组并在每次遇到与前一个字符不同的字符时发出计数来工作。最后,我们有一个重复的代码行,用于打印最终字符。