JavaLinkedHashSet练习
题目三:
1.键盘录入一个字符串,去掉其中重复字符
2.打印出不同的那些字符,必须保证顺序。例如输入:aaaabbbcccddd,打印结果为:abcd。
尝试用两种方法解决字符串删除问题,一是使用HashSet元素的唯一性,直接过滤掉重复的字符,二是写一个方法逐步判断.
import java.util.Iterator;
import java.util.LinkedHashSet; /*
* 三、根据需求完成代码
1.键盘录入一个字符串,去掉其中重复字符
2.打印出不同的那些字符,必须保证顺序。例如输入:aaaabbbcccddd,打印结果为:abcd。
Time:2018-8-12 01:18:41 Author:ccsoftlucifer
* */
public class MainClass {
public static void main(String[] args) {
String str = "aaaabbbcccddd";
//方案一:使用HashSet 自动过滤重复元素.
String s = chearCharMethod1(str);
System.out.println(s);
//方案二:自己写个方法过滤重复字符
System.out.println( chearCharMethod2(str)); }
/*
* 方案一:直接使用HashSet过滤掉重复的元素.
* */
private static String chearCharMethod1(String string) {
char[] strToArrray = string.toCharArray();
LinkedHashSet<Character> c = new LinkedHashSet<>();
for (int i = 0; i < strToArrray.length; i++) {
c.add(strToArrray[i]);
}
String valueString="";
/*for (int i = 0; i < c.size(); i++) {
valueString+=
}*/
Iterator<Character> it = c.iterator();
while(it.hasNext())
{
Character next = it.next();
String string1 = next.toString();
valueString+=string1;
} return valueString;
}
/*
* 使用数组的方式来删除字符串重重复的字符..
* */
private static String chearCharMethod2 (String string) {
String value="";
//字符串数组str1用来接受待处理的字符
char[] str1 = string.toCharArray();
//字符串数组str2用来接受处理好的字符
char str2 [] = new char[string.length()];
//str2的索引遍历初始值为k=0;
int k =0; //for循环去遍历str1字符数组,i指向当前位置,j指向下一个位置.
int i ,j;
for ( i = 0, j = 1; i < str1.length && j<str1.length ; i++,j++) {
//如果当前位置的元素 和 下一个元素的值相等 则跳过
//Test String:aaaabbbcccddd if(str1[i]==str1[j])
{
//跳过不作处理 continue;
}
else
{
//提取出不相等的
str2[k]=str1[i];
str2[k+1]=str1[i+1];
//这里我对 str2 添加了两个元素,那么表面上是 k+=2 但是是不对的!
//举个栗子:字符串 aabbcc ,第一次找到不相同的字符为 a,b 第二次找到不同的字符为b,c
//那么str2的值为 a,b,b,c. 其中b重复了两次,明显是不对的.
//可以尝试将第二次的b,c从a后开始追加,直接把b覆盖,就是a,b,c
//将k+=2 改成 k++;
k++;
}
}
for (int index = 0; index < str2.length; index++) { //System.out.println(str2[index]+" ");
value+=str2[index];
}
return value;
} }
运行结果:
1.产生10个1-20之间的随机数要求随机数不能重复
2.产生10个长度为10的不能重复的字符串(里面只能出现大写字母、小写字母、0-9的数字),并遍历打印输出
import java.util.LinkedHashSet;
import java.util.Random;
import java.util.Scanner; /*
* 1.产生10个1-20之间的随机数要求随机数不能重复
2.产生10个长度为10的不能重复的字符串(里面只能出现大写字母、小写字母、0-9的数字),并遍历打印输出
* */
public class Topic2 {
public static void main(String[] args) {
// method1();
method2();
method3(); }
/* 调用字符串产生方法makeArray(),将字符串添加到LinkedHashSet集合中,LinkedhashSet会自动的对
* 重复元素进行处理.
* */
private static void method3() {
LinkedHashSet<String> set = new LinkedHashSet<>();
while(set.size()<10)
{
set.add(makeArray()); }
System.out.println(set); }
/*产生长度为10的不能重复的字符串(里面只能出现大写字母、小写字母、0-9的数字)*/
private static String makeArray(){
String strValue = "";
//1.先创建一个字符数组,题目要求长度为10,即是字符数组的上限为10
char array[] = new char[10];
//2.随机生成 一个flag标记值,用来随机生成 小写字母 大写字母 数字
Random ra = new Random();
for (int i = 0; i < array.length; i++) {
//获得flag标记值
//flag为 0 标记 整数
//flag为 1 标记 小写字母
//flag为 2 标记 大写字母 int flag = ra.nextInt(3);
if (flag == 0)
{
int zhengshu = new Random().nextInt(10);
array[i]=(char)(48+zhengshu); }
else if (flag ==1){
int xiaoxie = new Random().nextInt(26);
array[i]=(char)('a'+xiaoxie);
}
else
{
int daxie = new Random().nextInt(26);
array[i]=(char)('A'+daxie);
}
}
for (int i = 0; i < array.length; i++) {
strValue+=array[i];
}
return strValue;
}
//1.产生10个1-20之间的随机数要求随机数不能重复
private static void method2() {
LinkedHashSet<Integer> set = new LinkedHashSet<>();
//产生随机数字,
Random ra = new Random();
int temp=0;
//将随机数组添加到set集合当中,set集合会自动的筛出重复的元素 //添加结束标志为 检测到set集合的size为10
while(set.size()<10){
temp=ra.nextInt(20)+1;
set.add(temp); }
System.out.println(set); }
运行结果:
JavaLinkedHashSet练习的更多相关文章
- Java-LinkedHashSet
如下: package 集合类.Set类; import java.util.Arrays; import java.util.HashSet; import java.util.LinkedHash ...
随机推荐
- 010 Editor v8.0.1(32 - bit) 算法逆向分析、注册机编写
010 Editor 的逆向分析整体算下来还是比较简单的,将程序拖入OD,通过字符串搜索定位到核心代码,经过分析,主要是如下图所示的两个关键函数,返回正确的值,才算是注册成功. 00409C9B 这个 ...
- 苹果ios系统无法通过RD Client连接win10服务器远程错误0x00001307
问题描述: 1.RD Client无法远程Windows 10桌面,提示“错误 用户名或密码错误” 之前连接是没有问题的,但是更新了win10系统以后就出现问题了 [解决方法]: 最后找到了原因是因为 ...
- 关于联想笔记本ThinkPad E470 没有外音 插耳机却有声音的解决办法
碰到这种情况,小编和大家一样选择设备管理器,找到声卡驱动卸载重新装,结果很失望,选择驱动精灵/联想驱动重装声卡,结果很绝望.并没有解决问题. 最后小编参考了一篇文章找到了解决办法 到联想官方网站服务界 ...
- 认识多线程中start和run方法的区别?
一.认识多线程中的 start() 和 run() 1.start(): 先来看看Java API中对于该方法的介绍: 使该线程开始执行:Java 虚拟机调用该线程的 run 方法. 结果是两个线程并 ...
- 英语口语练习系列-C05-水电
<登幽州台歌>·陈子昂 陈子昂(公元659-公元700年),唐代文学家,初唐诗文革新人物之一. Num 诗句 1 前不见古人, 2 后不见来者. 3 念天地之悠悠, 4 独怆然而涕下! T ...
- 面向对象_del
老师的博客http://www.cnblogs.com/Eva-J/articles/7351812.html#_label7 内置的方法有很多不一定全都在object中 #python3中,所有类都 ...
- c++11の条件变量
一.条件变量的引入 std::condition_variable 解决了死锁并且控制的资源的访问顺序二避免不必要的等待.当互斥操作不够用而引入的.比如,线程可能需要等待某个条件为真才能继续执行,而一 ...
- MongoDB 用MongoTemplate查询指定时间范围的数据
mongoDB大于小于符号对应: > 大于 $gt< 小于 $lt>= 大于等于 $gte<= 小于等于 $lte 要查询同一个时间多个约束可能出现的error: org.sp ...
- Auto Layout - BNR
继续UIImageView - BNR篇. 通过Homepwner TARGETS -> General -> Deployment Info -> Devices中的iPhone改 ...
- 如何在已有的 Web 应用中使用 ReactJS
原文:How to Sprinkle ReactJS into an Existing Web Application 译者:nzbin 当我们学习一项新技术,可能是一个 JavaScript 框架, ...