题目三:
1.键盘录入一个字符串,去掉其中重复字符
2.打印出不同的那些字符,必须保证顺序。例如输入:aaaabbbcccddd,打印结果为:abcd。
尝试用两种方法解决字符串删除问题,一是使用HashSet元素的唯一性,直接过滤掉重复的字符,二是写一个方法逐步判断.
1 import java.util.Iterator;
2 import java.util.LinkedHashSet;
3
4 /*
5 * 三、根据需求完成代码
6 1.键盘录入一个字符串,去掉其中重复字符
7 2.打印出不同的那些字符,必须保证顺序。例如输入:aaaabbbcccddd,打印结果为:abcd。
8 Time:2018-8-12 01:18:41 Author:ccsoftlucifer
9 * */
10 public class MainClass {
11 public static void main(String[] args) {
12 String str = "aaaabbbcccddd";
13 //方案一:使用HashSet 自动过滤重复元素.
14 String s = chearCharMethod1(str);
15 System.out.println(s);
16 //方案二:自己写个方法过滤重复字符
17 System.out.println( chearCharMethod2(str));
18
19 }
20 /*
21 * 方案一:直接使用HashSet过滤掉重复的元素.
22 * */
23 private static String chearCharMethod1(String string) {
24 char[] strToArrray = string.toCharArray();
25 LinkedHashSet<Character> c = new LinkedHashSet<>();
26 for (int i = 0; i < strToArrray.length; i++) {
27 c.add(strToArrray[i]);
28 }
29 String valueString="";
30 /*for (int i = 0; i < c.size(); i++) {
31 valueString+=
32 }*/
33 Iterator<Character> it = c.iterator();
34 while(it.hasNext())
35 {
36 Character next = it.next();
37 String string1 = next.toString();
38 valueString+=string1;
39 }
40
41
42 return valueString;
43 }
44 /*
45 * 使用数组的方式来删除字符串重重复的字符..
46 * */
47 private static String chearCharMethod2 (String string) {
48 String value="";
49 //字符串数组str1用来接受待处理的字符
50 char[] str1 = string.toCharArray();
51 //字符串数组str2用来接受处理好的字符
52 char str2 [] = new char[string.length()];
53 //str2的索引遍历初始值为k=0;
54 int k =0;
55
56 //for循环去遍历str1字符数组,i指向当前位置,j指向下一个位置.
57 int i ,j;
58 for ( i = 0, j = 1; i < str1.length && j<str1.length ; i++,j++) {
59 //如果当前位置的元素 和 下一个元素的值相等 则跳过
60 //Test String:aaaabbbcccddd
61
62 if(str1[i]==str1[j])
63 {
64 //跳过不作处理
65
66 continue;
67 }
68 else
69 {
70 //提取出不相等的
71 str2[k]=str1[i];
72 str2[k+1]=str1[i+1];
73 //这里我对 str2 添加了两个元素,那么表面上是 k+=2 但是是不对的!
74 //举个栗子:字符串 aabbcc ,第一次找到不相同的字符为 a,b 第二次找到不同的字符为b,c
75 //那么str2的值为 a,b,b,c. 其中b重复了两次,明显是不对的.
76 //可以尝试将第二次的b,c从a后开始追加,直接把b覆盖,就是a,b,c
77 //将k+=2 改成 k++;
78 k++;
79 }
80 }
81 for (int index = 0; index < str2.length; index++) {
82
83 //System.out.println(str2[index]+" ");
84 value+=str2[index];
85 }
86 return value;
87 }
88
89 }
运行结果:
![](https://images2018.cnblogs.com/blog/759102/201808/759102-20180812012338541-174895205.png)
1.产生10个1-20之间的随机数要求随机数不能重复
2.产生10个长度为10的不能重复的字符串(里面只能出现大写字母、小写字母、0-9的数字),并遍历打印输出
1 import java.util.LinkedHashSet;
2 import java.util.Random;
3 import java.util.Scanner;
4
5 /*
6 * 1.产生10个1-20之间的随机数要求随机数不能重复
7 2.产生10个长度为10的不能重复的字符串(里面只能出现大写字母、小写字母、0-9的数字),并遍历打印输出
8 * */
9 public class Topic2 {
10 public static void main(String[] args) {
11 // method1();
12 method2();
13 method3();
14
15
16 }
17 /* 调用字符串产生方法makeArray(),将字符串添加到LinkedHashSet集合中,LinkedhashSet会自动的对
18 * 重复元素进行处理.
19 * */
20 private static void method3() {
21 LinkedHashSet<String> set = new LinkedHashSet<>();
22 while(set.size()<10)
23 {
24 set.add(makeArray());
25
26 }
27 System.out.println(set);
28
29 }
30 /*产生长度为10的不能重复的字符串(里面只能出现大写字母、小写字母、0-9的数字)*/
31 private static String makeArray(){
32 String strValue = "";
33 //1.先创建一个字符数组,题目要求长度为10,即是字符数组的上限为10
34 char array[] = new char[10];
35 //2.随机生成 一个flag标记值,用来随机生成 小写字母 大写字母 数字
36 Random ra = new Random();
37 for (int i = 0; i < array.length; i++) {
38 //获得flag标记值
39 //flag为 0 标记 整数
40 //flag为 1 标记 小写字母
41 //flag为 2 标记 大写字母
42
43 int flag = ra.nextInt(3);
44 if (flag == 0)
45 {
46 int zhengshu = new Random().nextInt(10);
47 array[i]=(char)(48+zhengshu);
48
49 }
50 else if (flag ==1){
51 int xiaoxie = new Random().nextInt(26);
52 array[i]=(char)('a'+xiaoxie);
53 }
54 else
55 {
56 int daxie = new Random().nextInt(26);
57 array[i]=(char)('A'+daxie);
58 }
59 }
60 for (int i = 0; i < array.length; i++) {
61 strValue+=array[i];
62 }
63 return strValue;
64 }
65 //1.产生10个1-20之间的随机数要求随机数不能重复
66 private static void method2() {
67 LinkedHashSet<Integer> set = new LinkedHashSet<>();
68 //产生随机数字,
69 Random ra = new Random();
70 int temp=0;
71 //将随机数组添加到set集合当中,set集合会自动的筛出重复的元素
72
73 //添加结束标志为 检测到set集合的size为10
74 while(set.size()<10){
75 temp=ra.nextInt(20)+1;
76 set.add(temp);
77
78 }
79 System.out.println(set);
80
81 }
运行结果:
![](https://images2018.cnblogs.com/blog/759102/201808/759102-20180812221459056-1637930827.jpg)