Java 统计文本中出现次数最多的前10个大写字母开头的字符串
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 方法中的错误,并优化了代码逻辑。
主要修正点:
-
初始化数组:在
capitalCharStringArray方法中,将String[] capitalStringArray = new String[10];改为String[] capitalStringArray = new String[10]; for (int i = 0; i < capitalStringArray.length; i++) { capitalStringArray[i] = ''; },初始化所有元素为空字符串,避免了空指针异常。 -
扩容数组:在扩容数组时,将新创建的数组
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'替换为实际的文件路径。 - 为了提高代码的可读性,建议对代码进行适当的注释。
原文地址: https://www.cveoy.top/t/topic/oEuQ 著作权归作者所有。请勿转载和采集!