JavaLinkedHashSet練習


題目三:
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 }
運行結果:

 
        

 

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     }

 

運行結果:

 
        



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM