题目1:创建两个线性表,分别存储{“chen”,“wang”,“liu”,“zhang”}和{“chen”,“hu”,“zhang”},求这两个线性表的交集和并集。
(1)
1 package com; 2 3 import java.util.ArrayList; 4 5 public class 交集和并集 { 6 7 public static void main(String[] args) { 8 ArrayList<String> a1 = new ArrayList<String>(); //ArrayList对象 a1存储第一组字符串 9 a1.add("chen"); 10 a1.add("wang"); 11 a1.add("liu"); 12 a1.add("zhang"); 13 ArrayList<String> a2 = new ArrayList<String>(); //ArrayList对象a2存储第二组字符串 14 a2.add("chen"); 15 a2.add("hu"); 16 a2.add("zhang"); 17 18 ArrayList <String>a3 = new ArrayList<String>(); //ArrayList对象a3用来对两组字符串进行比较以及存储交集和并集 19 a3.addAll(a1); //a1全部存到a3里 20 for (int i = 0; i < a2.size(); i++) { //求并集:依次遍历a2中的元素判断 21 if (a3.contains(a2.get(i))) { //如果a2中的这个元素a3里也有,那么就进行下次循环。 22 continue; //如果a2中的这个元素a3里没有,那么就将这个元素存到a3里,最后得到的a3即为并集 23 } else { 24 a3.add(a2.get(i)); 25 } 26 } 27 System.out.println("两个字符串的并集是"+a3); 28 a3.removeAll(a3); //将a3中的元素都移除 29 30 for(int i=0;i<a2.size();i++){ //求交集:依次遍历a2中的元素 31 if(a1.contains(a2.get(i))){ //如果a2中的 这个元素a1里也有,就将这个元素存到a3里 32 a3.add(a2.get(i)); //如果a2中的这个元素a1里没有,就进行下次循环,最后得到的a3即为交集 33 } 34 } 35 System.out.println("两个字符串的交集是 :"+a3); 36 37 } 38 39 }
(2)运行结果:
题目2:编写一个应用程序,输入一个字符串,该串至少由数字、大写字母和小写字母三种字符中的一种构成,如“123”、“a23”、“56aD”、“DLd”、“wq”、“SSS”、“4NA20”,对输入内容进行分析,统计每一种字符的个数,并将该个数和每种字符分别输出显示。如:输入内容为“34Ah5yWj”,则输出结果为:数字——共3个,分别为3,4,5;小写字母——共3个,分别为h,y,j;大写字母——共2个,分别为A,W。
(1)
1 package com; 2 3 import java.util.HashMap; 4 import java.util.Iterator; 5 import java.util.Map; 6 import java.util.Scanner; 7 import java.util.Set; 8 9 public class zifu { 10 11 public static void main(String[] args) { 12 String regex="\\w{0,}"; //正则表达式判断输入是否符合要求 13 System.out.println("请输入一个字符串”:"); 14 Scanner reader=new Scanner(System.in); 15 String str=reader.nextLine(); //str接受输入的字符串 16 17 if(str.matches(regex)){ //如果str满足正则表达式的要求 18 int numbercount=0; //定义数字计数器,大写字母计数器,小写字母计数器 19 int captialcount=0; 20 int lowercasecount=0; 21 StringBuffer str1=new StringBuffer(); //三个StringBuffer类对象来分别存储数字,大写字母和小写字母 22 StringBuffer str2=new StringBuffer(); //因为要遍历到一个,就随时加到相应的字符串中,所以要用StringBuffer类来创建 23 StringBuffer str3=new StringBuffer(); 24 HashMap hm=new HashMap(); //创建HashMap对象 25 for(int i=0;i<str.length();i++){ //for循环遍历输入的字符串,并将其分类,将字符串拆成字符 26 char c=str.charAt(i); //将不同的字符存在不同的键值下, 27 if(c>='0'&&c<='9'){ //数字字符存在str1里,用键值“数字”标记,数字计数器+1 28 str1.append(c+""); 29 hm.put("数字", str1); 30 numbercount++; 31 }else if(c>='A'&&c<='Z'){ //大写字母存在str2里,用键值“大写字母”标记,大写字母计数器+1 32 str2.append(c+""); 33 hm.put("大写字母", str2); 34 captialcount++; 35 }else if(c>='a'&&c<='z'){ //小写字母存在str3里,用键值“小写字母标记”,小写字母计数器+1 36 str3.append(c+""); 37 hm.put("小写字母", str3); 38 lowercasecount++; 39 } 40 } 41 42 43 Set set=hm.entrySet(); //用set来存储所有HashMap中的项 44 Iterator i=set.iterator(); //遍历set中的元素即遍历HashMap中的所有元素 45 while(i.hasNext()){ 46 Map.Entry me=(Map.Entry)i.next(); //Map.Entry对象存放key和value 47 48 if(me.getKey().equals("数字")){ //如果me的键值与“数字”匹配,那么输出数字计数器的值和me的value值 49 System.out.print("数字共有"+numbercount+"个,"); 50 }else if(me.getKey().equals("大写字母")){ //如果me的键值与“大写字母”匹配,那么输出大写字母计数器的值和me的value值 51 System.out.print("大写字母共有"+captialcount+"个,"); 52 }else if(me.getKey().equals("小写字母")){ //如果me的键值与“小写字母”匹配,那么输出小写字母计数器的值和me的value值 53 System.out.print("小写字母共有"+lowercasecount+"个,"); 54 } 55 System.out.println("有:"+me.getValue()); 56 } 57 }else{ 58 System.out.println("输入错误"); //如果输入的字符串与正则表达式格式不符,则输入错误。 59 } 60 61 } 62 63 }
(2)运行结果:
输入合法:
输入不合法: