按字母顺序排列

时间:2016-03-13 04:38:40

标签: java sorting bufferedreader

我希望逐个字母顺序操作文本文件。在我的程序中有一种方法我不知道如何开始。我想获得类似的输出:

信件/计数

1 A 6 ***

2 B 8 ****

3 C 6 ***

(等)

6个名字以A开头,8个以B开头,6个以C开头。 然后每2个计数一个'*'。

我的练习题实际上是使用一个包含90000个名字和不同'*'计数的文本文件,但是我的学习非常感谢一个示例代码及其工作原理的解释。

这是我的计划的开始,但就像我说我不知道​​如何开始这个方法。

import javax.swing.JOptionPane;
import java.io.*;
public class P03Census {
String rec; 
int ctr = 0;


 public static void main(String[] args)throws IOException {
    Object result = JOptionPane.showInputDialog(null, "Enter a file           name\n(1990 to 2000)\nadd extension",
            "Taylor Daggett", JOptionPane.PLAIN_MESSAGE);

    String textDoc = (String) result;
    File file = new File(textDoc);
    System.out.println("-----------------------------------------------------------------------------------------");
    System.out.println("File name: " +
    file);

    if (!textDoc.endsWith(".txt")) {

        System.out.println("Usage: This is not a text file!");

        System.exit(0);

    } else if (!file.exists()) {

        System.out.println("File not found!");

        System.exit(0);


    }
    FileReader fr = new FileReader(file);
    BufferedReader br = new BufferedReader(fr);

    String rec;
    int lines = 0;
    int i;


    while((rec = br.readLine()) != null){

        lines++;
        }

        System.out.println("Record count:"+lines);  
        System.out.println("------------------------------------------------------------------------------------------");

}

}

1 个答案:

答案 0 :(得分:1)

这是一个可以执行您想要的算法,它利用了let buttonState: UIButton = UIButton(type: .Custom) buttonState.setImage(UIImage(named: "Button-State.png")?.imageWithRenderingMode(.AlwaysOriginal), forState: UIControlState.Normal) buttonState.addTarget(self, action: nil, forControlEvents: .TouchUpInside) buttonState.frame = CGRectMake(0, 0, 22, 22) 变量作为char的事实:

  1. 首先,创建一个数组int,您将使用它来计算字母数。
  2. 然后,在主int[] letterCount = new int[26]循环的主体内部,将字符串while转换为数组rec,其中每个元素都是一个名称。如果在输入文件中,名称始终由相同的String[]分隔(例如,像空格一样),则可以使用char
  3. 接下来,在String[] names = rec.split(" ")循环中浏览names,并检查每个名称的第一个字母:for。并使用它在数组char firstLetter = names[i].charAt(0)中将该字母的数量增加一:letterCount
  4. 在循环结束时,letterCount[firstLetter - 'a']++;应该有正确的计数。 注意如果您的文件包含大写字母,则必须在循环体的开头调用letterCount,否则在尝试调用{时会出现超出范围的错误{1}},或者如果所有名称都以大写字母开头,则只需替换为rec.toLowerCase()