这是博主第二次写博文,全部灵感源于作业需要,有写的不妥的地方还请谅解。。。。。
首先我们先获取一个字符串
Scanner input = new Scanner(System.in);
String str = input.nextLine();
我们先定义一个字符串 str 用来接收,使用 input.nextLine()可以忽略输入字符串的空格,得到一个连续的字符。
为了不改变原字符串的顺序,我们再定义一个新字符串 str2 ,在 str2 上进行修改
String str2;
str2 = str2.replaceAll("(.)(?=.*\\1)", "");
这里我们主要使用正则表达式进行替换,将重复出现的字符换成空,但替换后会改变原来字符串的顺序,所以我们要在这个基础上进行修改
str2 = new StringBuilder(str).reverse().toString();
str2 = str2.replaceAll("(.)(?=.*\\1)", "");
str2 = new StringBuilder(str2).reverse().toString();
这里我们两次使用 StringBuilder().reverse().toString() 这个方法,让改变后的字符串回到原来的顺序
接下来就是简单的实现输出每个字符出现的次数
int count=0;
char[] c = str2.toCharArray();
char[] c1 = str.toCharArray();
for(char a:c) {
for(int i=0;i<c1.length;i++) {
if(a == c1[i]) {
count++;
}
}
System.out.println(a+":"+count);
count = 0;
}
这里我们定义一个 count 用来记录每个字符出现的次数,同时使用简单的 foreach 进行遍历,
每次输出后记得重置 count ,否则 count 会一直加下去,这样就不是我们想要的结果了,好了接下来让我们看看源码以及效果。
import java.util.Scanner;
public class Std{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str = input.nextLine();
String str2;
int count=0;
str2 = new StringBuilder(str).reverse().toString();
str2 = str2.replaceAll("(.)(?=.*\\1)", "");
str2 = new StringBuilder(str2).reverse().toString();
char[] c = str2.toCharArray();
char[] c1 = str.toCharArray();
for(char a:c) {
for(int i=0;i<c1.length;i++) {
if(a == c1[i]) {
count++;
}
}
System.out.println(a+":"+count);
count = 0;
}
}
}
好了,到这里我们的功能就已经实现了,基于以上的功能想深入的小伙伴也可以将转换后的字符串打印出来,便于自己学习。