限于学习的知识范围,所以设计了一个简单算法,仅供参考。用于作业记录
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class String_Count {
public static void main(String[] args) throws IOException
{
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入一串字符串");
String text = buffer.readLine();
count(text);
}
public static void count(String te){
//创建两个数组,一个用于存字符串,一个用于存运算结果
char[] test = te.toCharArray();
int[] result = new int[test.length];
Arrays.fill(result, 1);
for (int i=0;i<test.length;i++){
if (result[i]==0){continue;}
for (int j=1;j<test.length-i;j++){
if(test[i] == test[j+i]){
//如果与后面的数字有相同则+1,且把后面相同的字符数字改为0
result[i]++;result[j+i]=0;
}
}
System.out.println("字符\""+test[i]+"\"有"+result[i]+"个");
}
}
}
假如初始状态的数组是这样的形态
输入的字符串是:“36936jkk6j”,长度为10
char test[]:
3 | 6 | 9 | 3 | 6 | j | k | k | 6 | j |
---|
int result[]:
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
---|
当我做第一次循环的时候,也就是test[0]与后面字符的比对
test[0] == test[1]? | 3==6? | 不相等 |
---|---|---|
test[0] == test[2]? | 3==9? | 不相等 |
test[0] == test[3]? | 3==3? | result[0]++;result[3]=0 |
… | … | … |
那么最后呈现的效果会是这样:
char test[]:
3 | 6 | 9 | 3 | 6 | j | k | k | 6 | j |
---|
int result[]:
2 | 3 | 1 | 0 | 0 | 2 | 2 | 0 | 0 | 0 |
---|
如果循环遇见i对应的result值为0时则continue
把result对应值不为0的输出即可。