一、String习题
1、请根据控制台输入的特定日期格式拆分日期
如:请输入一个日期(格式如:XXXX年XXX月XX日)经过处理得到:XX月XX日XXXX年
提示:使用String的方法indexOf、lastIndexOf、substring
解题思路一:
-
使用indexOf()确定“年”、“月”、“日”三个字的位置
-
使用substring()将年份、月份、日期分为三个小字符串
-
将三个小字符串按照顺序拼接起来,获得一个完整的,有序的日期
示例代码:
package test; /* 1.请根据控制台输入的特定日期格式拆分日期 如:请输入一个日期(格式如:**月**日****年) 经过处理得到:****年**月**日 提示:使用String的方法indexOf、lastIndexOf、substring 测试数据:2017年5月13日 */ import java.util.Scanner; public class test { public static void main(String[] args) { System.out.println("请输入日期:(****年**月**日)"); Scanner sc = new Scanner(System.in); String text = sc.nextLine(); System.out.println(text); int year = text.indexOf("年"); int mon = text.indexOf("月"); int day = text.indexOf("日"); String year1 = text.substring(0,text.indexOf("年"))+"年"; String mon1 =text.substring(text.indexOf("年")+1,text.indexOf("月"))+"月"; String day1 = text.substring(text.indexOf("月")+1,text.indexOf("日"))+"日"; System.out.println(mon1+day1+year1); } }
2、给出一个随机字符串,判断有多少字母?多少数字?
解题思路一:
-
将字符串转换为一个字符数组
-
将字符数组进行遍历,同时将每一个元素进行判断
-
使用两个变量分别统计出现的字母数量和数字数量
代码示例:
package test; import java.util.Scanner; // 2.给出一个随机字符串,判断有多少字母?多少数字? public class test2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String text = sc.nextLine(); char[] textCopy = text.toCharArray(); int numCount = 0,charCount = 0,elseCount = 0; for (char a : textCopy) { if( a >= '0' && a <= '9'){ numCount++; }else if (a >= 'a' && a <= 'z' || a >= 'A' && a <= 'Z'){ charCount++; }else{ elseCount++; } } System.out.println("字符数量:"+charCount+"\t数字数量:"+numCount+"\t其他字符:"+elseCount); } }
3、以下是一段歌词,请从这段歌词中统计出朋友出现的次数。
“这些年一个人,风也过,雨也走,有过泪,有过错, 还记得坚持甚么,真爱过才会懂,会寂寞会回首,终有梦终有你在心中。 朋友一生一起走,那些日子不再有,一句话,一辈子,一生情,一杯酒。朋友不曾孤单过,一声朋友你会懂,还有伤,还有痛,还要走,还有我。”
提示:使用String方法indexOf、substring。
解题思路一:
-
使用replace()将“朋友”替换为“”,这样字符串长度会减少
-
字符串减少的长度为“朋友”出现的次数的两倍
代码示例:
package test; /* 3.以下是一段歌词,请从这段歌词中统计出朋友出现的次数。 "这些年一个人,风也过,雨也走,有过泪,有过错, 还记得坚持甚么,真爱过才会懂,会寂寞会回首,终有梦终有你在心中。 朋友一生一起走,那些日子不再有,一句话,一辈子,一生情,一杯酒。朋友不曾孤单过,一声朋友你会懂,还有伤,还有痛,还要走,还有我。"; 提示:使用String方法indexOf、substring。 */ public class test3 { public static void main(String[] args) { String text = "朋友朋友一起走,那些日子不再有,朋友还有我,朋友朋友"; int oldLong,newLong,count; oldLong = text.length(); text = text.replace("朋友",""); newLong = text.length(); count = (oldLong-newLong)/2; System.out.println("朋友一共出现:"+count+"次"); } }
4、编写敏感词过滤程序
说明:在网络程序中,如聊天室、聊天软件等,经常需要对一些用户所提交的聊天内容中的敏感性词语进行过滤。如“性”、“色情”、“爆炸”、“恐怖”、“枪”、“军火”等,这些都不可以在网上进行传播,需要过滤掉或者用其他词语替换掉。
解题思路一:
-
将敏感词汇写进一个字符串数组中
-
循环遍历字符串数组,将语句中的敏感词汇分别使用replace()替换掉
示例代码:
package test; import java.util.Scanner; /* 4.编写敏感词过滤程序 说明:在网络程序中,如聊天室、聊天软件等,经常需要对一些用户所提交的聊天内容中的敏感性词语进行过滤。如“性”、“色情”、“爆炸”、“恐怖”、“枪”、“军火”等,这些都不可以在网上进行传播,需要过滤掉或者用其他词语替换掉。 提示:将用户的聊天内容保存到一个字符串对象或一个StringBuilder对象中,然后与敏感词语类表(数组实现)进行比对。如果属于敏感词语,就过滤掉或替换掉。 */ public class test4 { public static void main(String[] args) { String[] weiJin = {"性","色情","爆炸","恐怖","枪","军火"}; Scanner sc = new Scanner(System.in); String text = sc.nextLine(); for (String old: weiJin) { text = text.replace(old,"***"); } System.out.println(text); } }
5、根据输入的年份、产品类型和随机数产生固定资产编号
即:固定资产编号=年份+0+产品类型+3位随机数
程序运行流程:请输入年份:
……
请选择产品类型(1. 台式机 2. 笔记本 3. 其他):
……
生成3位随机数
最后显示固定资产编号
提示:3位随机数按如下方法产生:
(int)(Math.random()*1000);
代码示例:
package test;
/*
根据输入的年份、产品类型和随机数产生固定资产编号
即:固定资产编号=年份+0+产品类型+3位随机数
程序运行流程:请输入年份:
……
请选择产品类型(1. 台式机 2. 笔记本 3. 其他):
……
生成3位随机数
最后显示固定资产编号
提示:3位随机数按如下方法产生:
(int)(Math.random()*1000);
*/
import java.util.Scanner;
public class test5 {
public static void main(String[] args) {
StringBuffer sb= new StringBuffer();
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份:");
sb.append(sc.nextLine());
sb.append(0);
System.out.println("请输入产品类型:");
sb.append(sc.nextLine());
sb.append(String.valueOf((int)(Math.random()*1000)));
System.out.println(sb);
}
}
二、Date习题
6、计算某年、某月、某日和某年、某月、某日之间的天数间隔和周数。
解题思路一:
-
输入要计算的两个日期
-
将两个日期转换成时间戳
-
将两个时间戳相差的时间转换成日期
代码示例:
package test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; // 6.计算某年、某月、某日和某年、某月、某日之间的天数间隔和周数。 public class test6 { public static void main(String[] args) throws ParseException { /* 1、输入一个要计算的两个日期 2、将两个日期转换成时间戳 3、将两个时间戳相差的时间转换成日期 测试数据及测试结果: 2017年5月13日 2017-5-13 2018年5月13日 2018-5-13 2017年5月13日到2018年5月13日相差了:365天 52周 2017年5月13日 2017-5-13 2017年7月14日 2017-7-14 2017年5月13日到2017年7月14日相差了:62天 8周 */ Scanner sc = new Scanner(System.in); System.out.println("请输入第一个时间:"); String date1 = sc.nextLine(); System.out.println("请输入第二个时间:"); String date2 = sc.nextLine(); // 自定义日期格式,将输入的日期进行解析 SimpleDateFormat sd = new SimpleDateFormat(); sd.applyPattern("yyyy年MM月dd日"); Date date11 = sd.parse(date1); Date date22 = sd.parse(date2); // 将输入的日期转换成时间戳 long a =date11.getTime(); long b = date22.getTime(); // 计算两个时间戳之间的差值 long c = Math.abs(a-b); // 将时间差转换为两个时间相差的天数 1s = 1000ms long day = c/1000/60/60/24; // 将毫秒转化为天 long week = day/7; long ling = day%7; System.out.println(date1+"到"+date2+"相差了:"+day+"天\t"+week+"周"+ling+"天"); } }
7、计算并输出21世纪的闰年,计算程序的执行时间。
解题思路一:
-
使用
GregorianCalendar
类的isLeapYear()
直接判断年份是否是闰年 -
使用
System.currentTimeMillis()
来获得程序开始运行和结束运行时间戳,两者相减得到程序运行时间。代码示例:
package test; import java.util.GregorianCalendar; // 7.计算并输出21世纪的闰年,计算程序的执行时间。 public class test7 { public static void main(String[] args) { long beginTime = System.currentTimeMillis(),endTime; GregorianCalendar g = new GregorianCalendar(); for (int i = 2000;i<=2100;i++){ if(g.isLeapYear(i)){ System.out.println(i+"是闰年"); } } endTime = System.currentTimeMillis(); System.out.println("程序运行的时间为:"+(endTime-beginTime)+"ms"); } }
8、编写一个程序,设定一个有大小写字母的字符串,先将字符串的大写字符输出,再将字符串中的小写字符输出。
解题思路一:
-
将字符串转换为字符数组
-
使用两个StringBuffer分别存储大写和小写字母
-
将两个StringBuffer分别打印输出
示例代码:
package test; import java.util.Scanner; // 8.编写一个程序,设定一个有大小写字母的字符串,先将字符串的大写字符输出,再将字符串中的小写字符输出。 public class test8 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个带有大小写字母的字符串"); String text = sc.nextLine(); char[] text1 = text.toCharArray(); StringBuffer supper = new StringBuffer(); StringBuffer lower = new StringBuffer(); StringBuffer anothor = new StringBuffer(); for (char a:text1) { if (a >= 'a' && a <= 'z'){ lower.append(a+"、"); }else if(a >= 'A' && a <= 'Z'){ supper.append(a+"、"); }else{ anothor.append(a+"、"); } } System.out.println("大写字母有:"+supper); System.out.println("小写字母有:"+lower); System.out.println("其他字符有:"+anothor); } }
三、Calendar习题
9、编写程序,(Scanner)当以年-月-日的格式输入一个日期时,输出其该年是否为闰年,该月有几天,该日是星期几
解题思路一:
-
使用
SimpleDateFormat
来将输入的时间进行格式转化为Date
格式 -
使用
Date
初始化一个Calendar
-
使用
Calendar
中的方法获得对应结果代码示例:
package test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Scanner; // 9.编写程序,(Scanner)当以年-月-日的格式输入一个日期时,输出其该年是否为闰年,该月有几天,该日是星期几 public class test9 { public static void main(String[] args) throws ParseException { Scanner sc = new Scanner(System.in); SimpleDateFormat sd = new SimpleDateFormat(); sd.applyPattern("yyyy年MM月dd日"); System.out.println("请输入一个日期:"); String time = sc.nextLine(); Date dt = sd.parse(time); Calendar ca = Calendar.getInstance(); ca.setTime(dt); GregorianCalendar g = new GregorianCalendar(); if(g.isLeapYear(ca.get(Calendar.YEAR))){ System.out.println(ca.get(Calendar.YEAR)+"年是闰年"); }else{ System.out.println(ca.get(Calendar.YEAR)+"年不是闰年"); } System.out.println("这一个月有"+ ca.getActualMaximum(Calendar.DATE) +"天"); System.out.println("这一天是周"+ (ca.get(Calendar.DAY_OF_WEEK)-1)); } }