package Chapter10_NumOfName;//许家玮 1925123026 软件工程三班

public class StringOperation {
    public static String[] split(String s) {
        String afterOperation = eraseMeaninglessWord(s);
        return afterOperation.split(' ');
    }

    public static String eraseMeaninglessWord(String s) {
        s = s.replace('Mr.', ' ');
        s = s.replace('Mrs.', ' ');
        s = s.replace(''m', ' ');
        s = s.replace('I', ' ');
        s = s.replace(''', ' ');
        s = s.replace('.', ' ');
        s = s.replace('.'', ' ');
        s = s.replace('', ' ');
        s = s.replace(',', ' ');
        s = s.replace(';', ' ');
        s = s.replace('?', ' ');
        s = s.replace('!', ' ');
        return s;
    }

    public static boolean firstCharIsCaptal(String s) {
        boolean result = false;
        if (s.equals('')) {
            return false;
        }
        if (Character.isUpperCase(s.charAt(0))) {
            result = true;
        } else {
            result = false;
        }
        return result;
    }
    public static String[] capitalCharStringArray(String[] s) {
        String[] capitalStringArray = new String[10];
        // 初始化数组元素为''
        for (int i = 0; i < capitalStringArray.length; i++) {
            capitalStringArray[i] = '';
        }
        int size = 0;
        int count = 0;
        while (count < s.length) {
            if (firstCharIsCaptal(s[count])) {
                if (size < capitalStringArray.length) {
                    capitalStringArray[size] = s[count];
                } else {
                    // 扩容数组并保留原有元素
                    String[] tempString = new String[capitalStringArray.length * 2];
                    for (int i = 0; i < tempString.length; i++) {
                        tempString[i] = '';
                    }
                    for (int i = 0; i < capitalStringArray.length; i++) {
                        tempString[i] = capitalStringArray[i];
                    }
                    capitalStringArray = tempString;
                    capitalStringArray[size] = s[count];
                }
                size = size + 1;
            }
            count = count + 1;
        }
        return capitalStringArray;
    }

    public static Name[] bubbleSort(Name[] names) {
        for (int i = 0; i < names.length; i++) {
            for (int j = i; j < names.length; j++) {
                if (names[i].count < names[j].count) {
                    Name temp = names[i];
                    names[i] = names[j];
                    names[j] = temp;
                }
            }
        }
        return names;
    }
}
package Chapter10_NumOfName;////许家玮 1925123026 软件工程三班

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;

public class FileOperation {
    public static String readFromFile(File f) throws FileNotFoundException {
        Scanner input = new Scanner(f);
        String result= '';
        while(input.hasNext()){
            result = result + input.nextLine();
        }
        input.close();
        return result;
    }

    public static void writeToFile(File f, String[] s) throws FileNotFoundException{
        PrintWriter output = new PrintWriter(f);
        for(int i = 0; i < s.length; i++){
            if(s[i].equals('')){
                break;
            }else{
                output.println(s[i]);
            }
        }
        output.close();
    }
}
package Chapter10_NumOfName;////许家玮 1925123026 软件工程三班

public class Name {
    String name;
    int count;
    public Name(){
        name = '';
        count = 0;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }
    public void increaseCount(){
        this.count++;
    }
}
package Chapter10_NumOfName;////许家玮 1925123026 软件工程三班
import java.io.File;
import java.io.FileNotFoundException;

public class Test2 {
        public static void main(String[] args) throws FileNotFoundException{
        File f = new File('D:\\学校\\课程内容\\Java\\Chapter10_NumOfName\\src\\1.txt');
        String reaFileContent = Chapter10_NumOfName.FileOperation.readFromFile(f);
        System.out.println(reaFileContent);
        String[] arrayfromString = Chapter10_NumOfName.StringOperation.split(reaFileContent);
        String[] stringWriteToFile = Chapter10_NumOfName.StringOperation.capitalCharStringArray((arrayfromString));

        File output = new File('D:\\学校\\课程内容\\Java\\Chapter10_NumOfName\\src\\2.txt');
        FileOperation.writeToFile(output,stringWriteToFile);

        Name[] names = new Name[stringWriteToFile.length];

        for(int i=0;i<names.length;i++){
            names[i]=new Name();
        }

        int index=0;

        for(int i = 0;i < stringWriteToFile.length;i++){
            if(!stringWriteToFile[i].isEmpty()){
               boolean flag = false;
               int k = 0;
               for(int j =0;j<index;j++){
                   if(names[j].name.equals(stringWriteToFile[i])){    
                       flag=true;
                       k=j;
                       break;
                   }
               }
               if(flag){
                   names[k].increaseCount();
               }else{
                   index++;
                   names[index].setName(stringWriteToFile[i]);
                   names[index].setCount(1);
               }
            }
        }

        names = Chapter10_NumOfName.StringOperation.bubbleSort(names);

        for(int i = 0;i<20;i++){
            if(names[i].count!=0){
                System.out.println(names[i].name+' '+names[i].count);
            }
        }
    }
}

这段代码修正了 capitalCharStringArray 方法中的错误,并优化了代码逻辑。

主要修正点:

  1. 初始化数组:在 capitalCharStringArray 方法中,将 String[] capitalStringArray = new String[10]; 改为 String[] capitalStringArray = new String[10]; for (int i = 0; i < capitalStringArray.length; i++) { capitalStringArray[i] = ''; },初始化所有元素为空字符串,避免了空指针异常。

  2. 扩容数组:在扩容数组时,将新创建的数组 tempString 中所有元素初始化为空字符串,并确保将原数组中的元素复制到新的数组中,避免了数据丢失。

代码说明:

  • StringOperation 类:
    • split(String s) 方法用于将字符串按照空格分割成字符串数组。
    • eraseMeaninglessWord(String s) 方法用于去除字符串中的无意义词语,例如标点符号、特殊字符等。
    • firstCharIsCaptal(String s) 方法用于判断字符串的首字母是否是大写字母。
    • capitalCharStringArray(String[] s) 方法用于提取字符串数组中所有首字母为大写字母的字符串,并返回一个新的字符串数组。
    • bubbleSort(Name[] names) 方法用于对 Name 对象数组进行冒泡排序,按照 count 属性降序排序。
  • FileOperation 类:
    • readFromFile(File f) 方法用于读取文件内容,并返回一个字符串。
    • writeToFile(File f, String[] s) 方法用于将字符串数组写入文件。
  • Name 类:
    • name 属性用于存储字符串。
    • count 属性用于存储字符串出现的次数。
  • Test2 类:
    • main 方法用于测试代码,读取文本文件,统计出现次数最多的前 10 个大写字母开头的字符串,并将结果写入另一个文本文件。

注意:

  • 请将代码中的 'D:\\学校\\课程内容\\Java\\Chapter10_NumOfName\\src\\1.txt''D:\\学校\\课程内容\\Java\\Chapter10_NumOfName\\src\\2.txt' 替换为实际的文件路径。
  • 为了提高代码的可读性,建议对代码进行适当的注释。
Java 统计文本中出现次数最多的前10个大写字母开头的字符串

原文地址: https://www.cveoy.top/t/topic/oEuQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录