晚上刷复试机试题,刚刷到一个题目,特此记录。觉得题目还行,就怕到时上机会没有时间。具体题目如下。
输入一个字符串,要求输出能把所有的小写字符放前面,大写字符放中间,数字放后面,并且中间用空格隔开,如果同种类字符间有不同种类的字符,输出后也要用字符隔开。
例:输入 12abc3KF12
输出 abc KF 12 3 12
输入 rwr21r3hello666world
输出 rwr r hello world 21 3 666
记得之前就做出来了,采用了三次循环,分别遍历大写字符,小写字符和数字,再将它们加入不同的数组内。由于之前有点久远,所以就记不起具体的代码,又重新想了一种方法。具体代码如下
public class tset {
public static void main(String[] args) {
// TODO Auto-generated method stub
findDifferent("12abc3KF12");
}
public static void findDifferent(String str){
ArrayList<String> array=new ArrayList<>();//用来存储已经分割但是并未分类的字符串
ArrayList<String> xiaoxie=new ArrayList<>();//小写字符数组
ArrayList<String> daxie=new ArrayList<>();//大写字符数组
ArrayList<String> shuzi=new ArrayList<>();//数字字符数组
//先取第一个字符
String trmp=str.charAt(0)+"";
for(int i=1;i<str.length();i++){
//如果当前遍历字符与trmp字符串的最后一个字符为同种类型,拼接
if(isType(trmp.charAt(trmp.length()-1), str.charAt(i))){
trmp+=str.charAt(i);
}else{
//如果不相同则,把之前的字符串加入数组,trmp为当前字符
array.add(trmp);
trmp=str.charAt(i)+"";
}
}
//加入最后的字符串
array.add(trmp);
//再将混在一起的字符串进行分类
for(int i=0;i<array.size();i++){
char c=array.get(i).charAt(0);
if(c>='A'&&c<='Z')
daxie.add(array.get(i));
else if(c>='a'&&c<='z')
xiaoxie.add(array.get(i));
else
shuzi.add(array.get(i));
}
show(xiaoxie);
show(daxie);
show(shuzi);
}
//判断两个字符是不是同种类型的
public static boolean isType(char a, char b){
if((a>='A'&&a<='Z')&&(b>='A'&&b<='Z'))
return true;
else if((a>='a'&&a<='z')&&(b>='a'&&b<='z'))
return true;
else if((a>='0'&&a<='9')&&(b>='0'&&b<='9'))
return true;
else
return false;
}
//输出数组
private static void show(ArrayList<String> array){
for(int i=0;i<array.size();i++)
System.out.print(array.get(i)+" ");
}
}