zoukankan      html  css  js  c++  java
  • 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     }
    运行结果:

    
    


  • 相关阅读:
    javascript 创建节点和新增节点
    javascript 操作节点的属性
    javascript window对象常用方法
    为什么要用线程池?
    一个request请求然后锁定等待异步接口处理结果
    双端队列实现串行处理实现并发
    线程池创建线程的方式一定效率高吗?
    PriorityBlockingQueue 和 Executors.newCachedThreadPool()
    核心记账业务可用jdk7的PriorityBlockingQueue优先阻塞队列结合乐观锁实现
    对spring、AOP、IOP的理解 (转)
  • 原文地址:https://www.cnblogs.com/battlecry/p/9461836.html
Copyright © 2011-2022 走看看