JAVA 查找文本内的字符数 并且排序

JAVA面向对象题目(包含一点输入输出流)

题目:
统计一个文本文件calcCharNum.txt中相关字符的出现次数,例如:中(8)、b(16)、+(10)等,括号外是字符,括号内代表字符出现次数。要求使用自定义类的方式封装字符和出现次数以及自定义类封装相关的操作,并按照出现次数排序后从大到小输出


代码如下(示例):

public class CharNum implements Comparable<CharNum> {
    
           //实现compare 接口,如果不懂这个 的意死,可以自行百度
	private int num = 1;     //表示各个字符出现的个数
	private char c;  //定义变量字符 存储 文本内的汉字、英文字母等、
	//构造函数
	public CharNum(char c) {
    
    
		
		this.c = c;
	}
	
	//set/get方法
	public int getNum() {
    
    
		return num;
	}
	public void setNum(int num) {
    
    
		this.num = num;
	}
	public char getC() {
    
    
		return c;
	}
	public void setC(char c) {
    
    
		this.c = c;
	}

	@Override
	public String toString() {
    
    
		return "("+c+")"+"出现的次数为:"+num;
	}

	@Override
	public int compareTo(CharNum o) {
    
          //实现接口compare中的方法
		if(this.num == o.num ) {
    
    
			return this.c - o.getC();
		}else {
    
    
			return this.num - o.num;
		}
	}
}


public class CharArray {
    
    
	private static CharNum[] arr = new CharNum[0];

	private CharArray() {
    
    }

	private static CharArray instance = new CharArray();

	public static CharArray getinstance() {
    
    
		return instance;
	}

	public void add(char c) {
    
    
		if (c == '\n' || c == '\r')
			return;
		boolean exist = false;
		int i = 0;
		for (; i < arr.length; i++) {
    
    
			CharNum temp = arr[i];
			if (temp == null)
				break;
			if (c == temp.getC()) {
    
    
				arr[i].setNum(arr[i].getNum() + 1);
				exist = true;
				break;
			}
		}

		if (!exist) {
    
    
			if (i >= arr.length) {
    
    
				addLength(c);
			}
			CharNum temp = new CharNum(c);
			arr[i] = temp;
		}
	}

	private void addLength(char c) {
    
    
		// TODO Auto-generated method stub
		int len = arr.length * 2 + 1;
		CharNum[] arr1 = new CharNum[len];
		for (int i = 0; i < arr.length; i++) {
    
    
			arr1[i] = arr[i];
		}
		arr = arr1;
	}

	public void sort() {
    
    
		for (int i = 1; i < arr.length; i++) {
    
    
			for (int k = 0; k < arr.length - i; k++) {
    
    
				if(arr[k]!=null&&arr[k+1]!=null) {
    
    
				if (arr[k].compareTo(arr[k + 1]) < 0) {
    
    
					CharNum temp = arr[k];
					arr[k] = arr[k + 1];
					arr[k + 1] = temp;
				}
				}
			}
		}
	}

	public String toString() {
    
    
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < arr.length; i++) {
    
    
			if (arr[i] != null) {
    
    
				sb.append(arr[i].toString() + ",");
				if ((i + 1) % 5 == 0)
					sb.append("\n");
			}
		}
		if(sb.length()>1) {
    
    
			sb.deleteCharAt(sb.length() - 1);
		}
		return sb.toString();
		

	}

}



import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class CharTest {
    
    
	public static void main(String[] args) throws IOException {
    
    
		File f = new File("aaa.txt");
		CharArray arr = CharArray.getinstanct();
		if(f.exists()) {
    
    
			try(Reader r = new BufferedReader(new FileReader(f));){
    
    
				int cc;
				while((cc = r.read())!=-1) {
    
    
					arr.add((char)(cc));
				}
			}
			arr.sort();
			System.out.println(arr);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_42437438/article/details/113620532