字符集合!!!
描述
输入一个字符串,求出该字符串包含的字符集合,按照字母输入的顺序输出。
数据范围:输入的字符串长度满足 1 \le n \le 100 \1≤n≤100 ,且只包含大小写字母,区分大小写。
本题有多组输入
输入描述:
每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。
输出描述:
每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。
示例1 输入: abcqweracb
输出: abcqwer
示例2
输入:
aaa
输出:
a
思路:
以:abcqweracb 分析
首先我们要从一个字符串中获取到每个字符,那么需要遍历字符串,拿到每个字符
for(int i=0;i<str.length();i++){ char ch=str.charAt(i); }
因为相同的字符只输出一次,那么我们最好标记一下,比如当’a’第一次出现时,定义一个变量int x,让x=1,当’a’第2次第三次…出现时,我们让这个变量x=0。那么对定义的变量有什么要求?
其实,定义的该变量最好是boolean类型,因为boolean类型默认值false,也就是当’a’字符没有出现过时,该变量为false,比较符合大多数人的逻辑,当’a’出现时,把定义的变量赋值为true;
在每次遍历一个字符时判断一下,如果boolean x=false,说明没输出过字符’a’,那么把字符’a’输出,并把x变量赋值为true;那么下次判断的是时候,打印语句就不会执行。
因为输入的字符有许多种,不可能一种字符定义一个变量,此时我们可以定义一个boolean数组,当字符为’a’时,(根据ASCII码值,字符’a’=97),对应该数组下标97,字符为’b’时,对应数组下标98,
综上,遍历字符串,拿到每个字符,然后根据这个字符的ASCII值,对应一个boolean数组的下标,通过下边就可以唯一对应一个字符,当某个字符没出现时默认为false,,当
该字符第一次出现时,因为默认值为false,进出判断语句,然后让该字符对应数组的赋值为true;下次该字符再次出现时,再也不会进入判断语句。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextLine()) { // 注意 while 处理多个 case String str=in.nextLine(); StringBuilder stringBuilder=new StringBuilder(); boolean[] flgs=new boolean[127]; for(int i=0;i<str.length();i++){ char ch=str.charAt(i); if(flgs[ch]==false){ stringBuilder.append(ch);//如果某字符第一次出现,,就把 //该字符连接到 stringBuilder,便于后续直接输出 flgs[ch]=true; } } System.out.println(stringBuilder); } } }