源码:
package Test7;
import java.util.Scanner;
import java.util.Arrays;
class sort {
public static void main(String[]args){
System.out.println("请输入需要排序的字母(A-z),(a-z):");
@SuppressWarnings("resource")
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
char[] ch=str.toCharArray();//字符串转为字符数组
char[] chs=str.toCharArray(); //定义新数组用来实现位置信息,为了先显示排序,所以传递ch的值
int[] lownum=new int[26];
int[] upnum=new int[26];
for(int i=0;i<str.length();i++) {
//大写字母
if(0<=(ch[i]-65)&&(ch[i]-65)<=26) {
upnum[ch[i]-65]++; //ASICC码转换
}
//小写字母
if(0<=(ch[i]-97)&&(ch[i]-97)<=26) {
lownum[ch[i]-97]++; //ASICC码转换
}
}
//排序
Arrays.sort(ch);
//正序排序输出
System.out.print("正序排序:");
for(int i=0;i<ch.length;i++){
System.out.print(ch[i]);
}
System.out.print("\n");
//小写字母计数输出
System.out.print("小写字母计数:");
for(int i=0;i<lownum.length;i++) {
if(lownum[i]!=0) {
System.out.print((char)(i+97)+":"+lownum[i]+"个"+" ");
}
}
System.out.print("\n");
//大写字母计数输出
System.out.print("大写字母计数:");
for(int i=0;i<upnum.length;i++) {
if(upnum[i]!=0) {
System.out.print((char)(i+65)+":"+upnum[i]+"个"+" ");
}
}
System.out.print("\n");
//位置(用最笨的办法取巧解决:逐个对比)
int x=0,d=0;
for(int j=0;j<chs.length;j++) { //将每个字母(搜索字母)单独与整个字符串对比
x=j-1;
while(x>-1) {
if(chs[j]==chs[x]) d=1; //将搜索字母往前遍历,如果重复,则跳过此搜索字母
x--;
}
if(j>0) {
if(chs[j]!=chs[j-1]&&chs[j]!=chs[0]&&d!=1) {//将搜索字母从当前位置向后对遍历
System.out.print(chs[j]+"出现的位置:");
for(int i=j;i<chs.length;i++) {
if(chs[i]==chs[j]) {
System.out.print(i+1+" ");
}
}
System.out.print("\n");
}
d=0; //重置d值
}
else if(j==0) { //0位的搜索字母因为无法对比到,特殊处理
System.out.print(chs[0]+"出现的位置:");
for(int i=0;i<chs.length;i++) {
if(chs[i]==chs[0]) {
System.out.print(i+1+" ");
}
}
System.out.print("\n");
}
}//for
}
}
运行截图: