1.题目:
输入一个字符串,求出该字符串包含的字符集合,按照字母输入的顺序输出。
数据范围:输入的字符串长度满足 1≤n≤100 1≤n≤100 ,且只包含大小写字母,区分大小写。
输入描述:
每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。
输出描述:
每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。
示例1
输入:
abcqweracb复制输出:
abcqwer
2.题解思路:
小编认为,可以有两个容器来存字符串,一个是输入的字符串,通过遍历下标,将对应的字符放入另一个容器中,并在放入之前要看这个容器中是否已经存在次字符,若存在则不放入,反之则放入。
3.题目代码:
代码一:
在这里小编使用了一个数组存放要放的字符,通过输入字符的,charAt方法遍历字符,如果在放入时只要字符发生相等(即存在情况下)返回false,只有当bool的值为true时才会存入。最后通过数组转字符串,输出字符串。(别忘了重置bool的值)
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
char[] arr = new char[str.length()];
char ch = str.charAt(0);
arr[0] = ch;
int k=1;
for (int i = 1; i < str.length(); i++) {
boolean bool=true;
ch=str.charAt(i);
for (int j = 0; j < str.length(); j++) {
if (ch==arr[j]){
bool=false;
}
}
if(bool==true){
arr[k]=ch;
++k;
System.out.println(k);
}
}
String str1=str.valueOf(arr);
System.out.println(str1);
代码二:
合上述思路一样,只不过这小编将数组换成了字符串,并在判断是否存在时运用了contains方法,(注意ch是字符类型,在方法里得是字符类型,所以加了引号)
String string="";
Scanner in=new Scanner(System.in);
String str1=in.nextLine();
for(int i=0;i<str1.length();i++){
char ch=str1.charAt(i);
System.out.println(ch);
if(!string.contains(ch+"")){
string += ch;
}
}
System.out.println(string);
代码三:
这里小编运用了StringBuilder,通过判断字符是否存在,如果存在则返回的是一个下标,下标大于0,如果不存在则返回一个-1;字符相加用的StringBuilder的append方法,这样一直使用的是一个对象,比方法二更加高效。
Scanner sc=new Scanner(System.in);
String string=sc.nextLine();
StringBuilder stringBuilder=new StringBuilder();
for (int i = 0; i <string.length() ; i++) {
char ch=string.charAt(i);
if (stringBuilder.indexOf(ch+"")<0){
stringBuilder.append(ch);
}
}
String str=stringBuilder.toString();
System.out.println(str);