您的位置:首页 > 其它

用户通过键盘指定一个字符串,然后由程序来统计并输出在该字符串中每个字符出现的次数

2020-06-05 08:13 288 查看

题目:编写程序String_Count.java,由用户通过键盘指定一个字符串,然后由程序来统计并输出在该字符串中每个字符出现的次数。

这类题目有很多种方法:
(1)可以使用map等集合方法,通过键-值匹配的方式匹配字母及其个数
(2) 使用二维数组来储存对应字母和个数

但是经过创新思考,总结出了一种最简单的方法,就使用一维数组来实现,而且效率还不错,试用性广,在这里分享给大家这种方法,希望对大家有所帮助!

package ex07_new;
import java.util.Scanner;
/**
* 改进版之用最简单的数组方法实现:
* @content:用户通过键盘指定一个字符串,然后由程序来统计并输出在该字符串中每个字符出现的次数
* @author:H烊X
*/
public class String_Count {
static int[] symbolNum;// 对于个数的存储,最后输出统计结果
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请随便输入一串字符:");
String s = input.nextLine();
symbolNum = new int[s.length()];
find(s);// 查找有哪些字母出现过
print(s);// 打印信息
input.close();
}
public static void find(String s) {
for (int i = 0; i < s.length(); i++) {
//抽取本身单个字符,逐一查找是否重复出现,出现就记录
for (int j = 0; j < s.length(); j++) {
if (s.charAt(i) == s.charAt(j)) {
symbolNum[i]++;
//注意这里的会把出现过的字符个数重复统计,只要在输出的时候剔除即可
}
}
}
}
public static void print(String s) {
System.out.println("输入的字符串中字母统计个数如下:");
for (int i = 0; i < s.length(); i++) {
if (symbolNum[i] > 0) {
System.out.println("‘" + s.charAt(i) + "’" + "的个数是:" + symbolNum[i]);
//对上面打印过的字符输出后,剔除后面重复打印的即可
for (int j = 0; j < s.length(); j++) {
if (s.charAt(i) == s.charAt(j)) {
symbolNum[j] = 0;
}
}
}
}
}
}

运行结果:

注:这里的 ‘ ’代表输入的是空格!
还有因为是改进版的,我那个控制台输出语句说“字母”实际是每个“字符”

标题改进版之:不区分大小写版+减少循环

package ex07_new;

import java.util.Scanner;

/**
* 用最简单的数组方法实现:
* @content:用户通过键盘指定一个字符串,然后由程序来统计并输出在该字符串中每个字符出现的次数
* @author:H烊X
* @修改原因:课堂测验,修改内容:完善BUG
*/
public class String_Count {
static int[] symbolNum;// 对于个数的存储,最后输出统计结果

public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请随便输入一串字符:");
String s = input.nextLine();
symbolNum = new int[s.length()];
find2(s);// 查找有哪些字母出现过
print(s);// 打印信息
input.close();
}
/*分析案例:
s--------- | N | N | n | _ _ _ | n | h | o |
symbolNum[i] =   0   0   0   0 0 0   0   0   0
4   -1  -1  3 -1 -1 -1  1   1
*/
public static void find2(String s) {
for (int i = 0; i < s.length(); i++) {
//对于已经查过的字符已被记录(用-1记录),当循环被记录的字符时,直接跳过,更加高效
if(symbolNum[i]<0) continue;

//抽取本身单个字符,逐一查找是否重复出现,出现就记录
for (int j = 0; j < s.length(); j++) {
if(i==j) symbolNum[i]++; //由于初始,默认为0,自身时要+1
if (String.valueOf(s.charAt(i)).equalsIgnoreCase(String.valueOf(s.charAt(j)))&& i != j) {
symbolNum[i]++;
//记录已经算过的字符:
symbolNum[j] = -1;
}
}
}
}

public static void print(String s) {
System.out.println("输入的字符串中字母统计个数如下:");
for (int i = 0; i < s.length(); i++) {
// 直接打印即可:
if (symbolNum[i] > 0) {
System.out.println("‘" + s.charAt(i) + "’" + "的个数是:" + symbolNum[i]);
}
}
}
}

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐