码迷,mamicode.com
首页 > 编程语言 > 详细

JavaLinkedHashSet练习

时间:2018-08-12 10:29:54      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:判断   alt   添加   接受   inf   技术分享   next   重复   imp   

题目三:
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 }
运行结果:

技术分享图片


 



JavaLinkedHashSet练习

标签:判断   alt   添加   接受   inf   技术分享   next   重复   imp   

原文地址:https://www.cnblogs.com/battlecry/p/9461836.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!