通过以下的几个小练习来熟悉和掌握Java常用工具类的一些操作。

1. 请根据控制台输入的特定日期格式拆分日期

说明:请输入一个日期(格式如:xx月xx日xxxx年)
经过处理得到:xxxx年xx月xx日

提示:使用String的方法indexOf、lastIndexOf、substring

答案代码:
import java.util.Scanner;public class SplitDate {public static void main(String[] args) {Scanner sc= new Scanner(System.in);System.out.println("请输入日期:  (格式如:xx月xx日xxx年)");String indate = sc.nextLine();int m = indate.indexOf("月");  //获取"月"的下标值int d = indate.indexOf("日");int y = indate.indexOf("年");String month = indate.substring(0,m); //拆分字符串   从0下标开始到“月“的下标拆分赋值给 monthString day = indate.substring(m+1,d);String year = indate.substring(d+1,y);StringBuffer newdate = new StringBuffer(year);newdate.append("年");newdate.append(month);newdate.append("月");newdate.append(day);newdate.append("日");newdate.toString();System.out.println(newdate);}
}
运行结果:
请输入日期:  (格式如:xx月xx日xxx年)
12月3日1999年
1999年12月3日

2. 给出一个随机字符串,判断有多少字母?多少数字?

想法:把字符串转换成字符数组,用for循环来判断字符和计数。

答案代码:
import java.util.Scanner;public class CountNum {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请在下面输入一个包含字母和数字的字符串:");String str = sc.nextLine();char [] ch = str.toCharArray();   //将此字符串转换为新的字符数组。int chCount = 0; //字母总数int nmCount = 0; //数组总数for(int i = 0 ; i < ch.length ; i++){if (ch[i] >= 'a' && ch[i] <= 'z' || ch[i] >= 'A' && ch[i] <= 'Z')chCount++;if (ch[i] >= '0' && ch[i] <='9')nmCount++;}System.out.println("这个字符串中共有 " + chCount+ "个字母和 " +nmCount+ "个数字");}
}
运行结果:
请在下面输入一个包含字母和数字的字符串:
123456ABCde78
这个字符串中共有 5个字母和 8个数字

3. 以下是一段歌词,请从这段歌词中统计出朋友出现的次数。

“这些年一个人,风也过,雨也走,有过泪,有过错, 还记得坚持甚么,真爱过才会懂,会寂寞会回首,终有梦终有你在心中。
朋友一生一起走,那些日子不再有,一句话,一辈子,一生情,一杯酒。朋友不曾孤单过,一声朋友你会懂,还有伤,还有痛,还要走,还有我。”;

提示:使用String方法indexOf、substring。

方法 1(不完善):(split方法容易有bug,如"朋友在开头或结尾出现两次就会出现计数错误")
java String.split()函数的用法分析

答案代码:
public static void main(String[] args) {String str = "这些年一个人,风也过,雨也走,有过泪,有过错, 还记得坚持甚么,真爱过才会懂,会寂寞会回首,终有梦终有你在心中。" +" 朋友一生一起走,那些日子不再有,一句话,一辈子,一生情,一杯酒。朋友不曾孤单过,一声朋友你会懂,还有伤,还有痛,还要走,还有我。";//split 此方法返回的数组包含此字符串的每个子字符串,该字符串由与给定表达式匹配的另一个子字符串终止,或由字符串结尾终止。// 数组中的子字符串按照它们在此字符串中的顺序排列。 如果表达式与输入的任何部分不匹配,则生成的数组只有一个元素,即这个字符串。//例如: 若传参 "这" ,countWord的长度则为1String[] countWord = str.split("朋友");System.out.println(countWord.length -1);for (int i = 0; i < countWord.length; i++){System.out.println(countWord[i]);}
}
运行结果:
3
这些年一个人,风也过,雨也走,有过泪,有过错, 还记得坚持甚么,真爱过才会懂,会寂寞会回首,终有梦终有你在心中。
一生一起走,那些日子不再有,一句话,一辈子,一生情,一杯酒。
不曾孤单过,一声
你会懂,还有伤,还有痛,还要走,还有我。

方法 1(修改后):

答案代码:
 public static void main(String[] args) {String str = "朋友朋友朋友这些年一个人,风也过,雨也走,有过泪,有过错 "+"还记得坚持甚么,真爱过才会懂,会寂寞会回首,终有梦终有你在心中"+"朋友一生一起走,那些日子不再有,一句话,一辈子,一生情,一杯酒。"+"朋友不曾孤单过,一声朋友你会懂,还有伤,还有痛,还要走,还有我。朋友朋友";str = "-" +str + "-";String[] ss = str.split("朋友");System.out.println(ss.length - 1);for (String i:ss){System.out.println(i);}
}
运行结果:
8
-  这些年一个人,风也过,雨也走,有过泪,有过错 还记得坚持甚么,真爱过才会懂,会寂寞会回首,终有梦终有你在心中
一生一起走,那些日子不再有,一句话,一辈子,一生情,一杯酒。
不曾孤单过,一声
你会懂,还有伤,还有痛,还要走,还有我。-

方法 2:关键字消除后减少的长度除以关键字长度

答案代码:
    public static void main(String[] args) {String str = "朋友朋友这些年一个人,风也过,雨也走,有过泪,有过错\n "+"还记得坚持甚么,真爱过才会懂,会寂寞会回首,终有梦终有你在心中\n"+"朋友一生一起走,那些日子不再有,一句话,一辈子,一生情,一杯酒。\n"+"朋友不曾孤单过,一声朋友你会懂,还有伤,还有痛,还要走,还有我。朋友朋友";String keyWord = "朋友";int startLen = str.length();str = str.replace(keyWord,""); //将关键词消除System.out.println(str);int endLen = str.length();int iCount = (startLen-endLen)/keyWord.length();  //减少的长度除以关键字长度System.out.println(keyWord+" 一共出现了"+ iCount + "次");}
运行结果:
这些年一个人,风也过,雨也走,有过泪,有过错还记得坚持甚么,真爱过才会懂,会寂寞会回首,终有梦终有你在心中
一生一起走,那些日子不再有,一句话,一辈子,一生情,一杯酒。
不曾孤单过,一声你会懂,还有伤,还有痛,还要走,还有我。
朋友 一共出现了7次

4. 编写敏感词过滤程序

说明:在网络程序中,如聊天室、聊天软件等,经常需要对一些用户所提交的聊天内容中的敏感性词语进行过滤。如“性”、“色情”、“爆炸”、“恐怖”、“枪”、“军火”等,这些都不可以在网上进行传播,需要过滤掉或者用其他词语替换掉。

提示:将用户的聊天内容保存到一个字符串对象或一个StringBuilder对象中,然后与敏感词语类表(数组实现)进行比对。如果属于敏感词语,就过滤掉或替换掉。

答案代码:
 public static void main(String[] args) {String [] forbidden = {"性","色情","爆炸","恐怖","枪","军火"}; //敏感词汇Scanner sc = new Scanner(System.in);String str = sc.nextLine();for (String s :forbidden){//生成指定长度的*String nul = "";                    //替换敏感词汇for (int i = 0; i <s.length(); i++)nul += "*";if (str.contains(s))               // boolean contains 方法 当且仅当此字符串包含指定的char值序列时才返回true。str = str.replace(s,nul);     //replace(char oldChar,char newChar) 返回从替换所有出现字符串}System.out.println(str);}
运行结果:
我喜欢枪械,但是抵制那些色情和性暴力的网站。 //输入
我喜欢*械,但是抵制那些**和*暴力的网站。

5. 根据输入的年份、产品类型和随机数产生固定资产编号

说明:固定资产编号=年份+0+产品类型+3位随机数

程序运行流程:请输入年份:
……
请选择产品类型(1. 台式机 2. 笔记本 3. 其他):
……
生成3位随机数
最后显示固定资产编号

提示:3位随机数按如下方法产生: (int)(Math.random()*1000);

答案代码:
public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入年份:");String year = sc.nextLine();System.out.println("请输入产品类型:(1.台式机 2.笔记本 3.其他)");int type = sc.nextInt();System.out.println("生成固定资产编号为:"+year+ type+ +(int)(Math.random()*1000) );
}
运行结果:
请输入年份:
1999  //输入
请输入产品类型:(1.台式机 2.笔记本 3.其他)
2      //输入
生成固定资产编号为:19992316

6. 计算某年、某月、某日和某年、某月、某日之间的天数间隔和周数。

答案代码:
public static void main(String[] args) throws ParseException {Scanner sc = new Scanner(System.in);System.out.println("请按格式输入第一个日期:(例:1999-7-3)");String date1 = sc.nextLine();System.out.println("请输入第二个日期:");String date2 = sc.nextLine();//把字符串类型解析为Date类型SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd"); //注意字母大小写Date d1 = sd.parse(date1); //从字符串中解析文本以产生一个DateDate d2 = sd.parse(date2);//        long time = 0;
//        if (d1.after(d2)) //判断时间先后
//            time = d1.getTime() - d2.getTime();
//        else
//            time = d2.getTime() - d1.getTime();long time = Math.abs(d2.getTime() - d1.getTime());  //取绝对值long day = time/1000/60/60/24;System.out.println("相隔共:" + day + "天");System.out.println("相隔共:" + day/7 + "周" + day%7 + "天");
}
运行结果:
请按格式输入第一个日期:(例:1999-7-3)
2018-10-05           //输入
请输入第二个日期:
2019-4-10            //输入
相隔共:187天
相隔共:26周5天

7. 计算并输出21世纪的闰年,计算程序的执行时间。

想法:可以用System类中的 currentTimeMillis()

答案代码:
import java.util.GregorianCalendar;public class IsLeapYeay {public static void main(String[] args) {long startTime = System.currentTimeMillis(); //获取系统时间GregorianCalendar years = new GregorianCalendar(); //公历类for (int i =2000 ;i <= 2100 ; i++){if (years.isLeapYear(i) )System.out.print(i + "  ");}long endtTime = System.currentTimeMillis(); //获取系统时间System.out.println("\n运行时间为:"+(endtTime-startTime)+"毫秒");}
}
运行结果:
2000  2004  2008  2012  2016  2020  2024  2028  2032  2036  2040  2044  2048  2052  2056  2060  2064  2068  2072  2076  2080  2084  2088  2092  2096
运行时间为:78毫秒

8. 编写一个程序,设定一个有大小写字母的字符串,先将字符串的大写字符输出,再将字符串中的小写字符输出。

想法:先把字符串转换成字符数组,再用StringBuffer类中的的append方法来给追加新识别的字符。

答案代码:
public static void main(String[] args) {String str = "!HELLOworldABCDEFabcdef/*-$g";char []ch = str.toCharArray();  //字母串转化成字符数组StringBuffer strb1 = new StringBuffer();   //大写字母StringBuffer strb2 = new StringBuffer();   //小写祖母StringBuffer other = new StringBuffer();for (char c:ch){if (c >= 'a' && c <= 'z'){strb1.append(c);}else if (c >= 'A' && c <= 'Z')strb2.append(c);elseother.append(c);}System.out.println("字符串中的大写字母为:"+strb1);System.out.println("字符串中的小写字母为:"+strb2);System.out.println("其他字符:"+other);//大小写字母切换
//        for (int i=0;i<ch.length;i++)
//        {
//            if (ch[i]>= 'a' && ch[i] <= 'z')
//                ch[i] = (char)(ch[i]-32);
//            else if (ch[i] >= 'A' && ch[i] <= 'Z')
//                ch[i] = (char)(ch[i]+32);
//            System.out.print(ch[i]);
//        }}
运行结果:
字符串中的大写字母为:worldabcdefg
字符串中的小写字母为:HELLOABCDEF
其他字符:!/*-$
//  !helloWORLDabcdefABCDEF/*-$G

9. 编写程序,(Scanner)当以年-月-日的格式输入一个日期时,输出其该年是否为闰年,该月有几天,该日是星期几

想法:将输入年份转化为Date格式,然后定义三个变量通过calender.setTime(Date date)方法来设置时间,再用Calendar.get()方法来获得年份,月份,第几天的值。
用代表年份的变量通过GregorianCalendar的isLeapYear(int year)来判断闰年。

答案代码:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;public class IdDdte {public static void main(String[] args) throws ParseException {Scanner sc = new Scanner(System.in);System.out.println("请输入一个日期:(例:1999年1月1日)");String str =sc.nextLine();SimpleDateFormat sd = new SimpleDateFormat("yyyy年MM月dd日");Date indate = sd.parse(str);   //将字符串转换成日期Calendar calendar =  Calendar.getInstance(); //使用默认时区和区域设置获取日历。calendar.setTime(indate);//使用给定的Date设置此Calendar的时间int year = calendar.get(Calendar.YEAR);  //年份int days_of_month = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);  //该月的天数int day_of_week =calendar.get(Calendar.DAY_OF_WEEK);if (calendar.get(Calendar.DAY_OF_WEEK) == 1) //1代表周日 7代表周六 2代表周一day_of_week = 7;elseday_of_week --;GregorianCalendar gregorianCalendar = new GregorianCalendar();  //GregorianCalendar 是Calender的子类if (gregorianCalendar.isLeapYear(year))System.out.println(year+" 年是闰年");elseSystem.out.println(year+" 年是平年");System.out.println("该年"+ (calendar.get(Calendar.MONTH)+1) +"月有" +days_of_month+"天");System.out.println("这天是这周的第"+day_of_week+"天");}
}
运行结果:
请输入一个日期:(例:1999年1月1日)
2019年12月30日  //输入
2019 年是平年
该年12月有31天
这天是这周的第1天

Java常用类练习01相关推荐

  1. Java 常用类 Math类的使用教程

    一.Java常用类Math类的用法 1.输出Π的值: System.out.println("圆周率Π的值为:" + Math.PI); //圆周率Π的值为:3.141592653 ...

  2. 第八章笔记 Java常用类

    第八章笔记 Java常用类 文章目录 第八章笔记 Java常用类 第一节 Java类库概述 Java类库文档 Java类库列表 第二节 数字相关类 Java数字类 大数字类 随机数类 数字工具类 第三 ...

  3. Java常用类:时间相关类

    Java常用类:时间相关类 java.util.Date java.util.Calendar java.time 基本废弃,但有一个方法仍在使用 目前程序中最常用的, 是抽象类 Java 8 推出新 ...

  4. <十>java常用类(2)

    Java常用类-String类(二) String的常用方法1 一.方法概述 int length():返回字符串的长度 char charAt(int index):返回某索引处的字符 boolea ...

  5. 学习-Java常用类之Calendar类

    第1关:学习-Java常用类之Calendar类 任务描述 本关任务:获取给定年月的最后一天. 相关知识 我们通过之前的学习已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定 ...

  6. JavaEE基础第9章Java常用类

    第9章Java常用类 字面量的定义方式都是存在常量池中的,常量池中不会存储多个一样的字符串,在定义一个字符串的时候会先去常量池中找有没有存在的,有就将地址传过去,没有就新建. String字符串 概念 ...

  7. Java基础-->一篇讲全Java常用类(详细易懂,建议收藏)

    Java基础–>一篇讲全Java常用类(详细易懂,建议收藏) 文章目录 Java基础-->一篇讲全Java常用类(详细易懂,建议收藏) 1.字符串相关的类 String类 概述 创建Str ...

  8. 这些Java常用类,你必须要学会,还不快快收藏?(近两万字详细介绍)

    零基础学习之Java常用类 概述 包装类 和数学相关的类 String类 创建字符串对象 使用构造方法 使用静态方法 使用" " + 拼接 字符串对象的比较 字符串的常用方法 可变 ...

  9. Java常用类之要点总结

    Java常用类之要点总结

最新文章

  1. winlogon.exe错误:小心设置搜狗拼音输入法
  2. python excel 自动化-python自动化测试报告(excel篇)
  3. Spring学习笔记八--Bean生命周期和后置处理器
  4. Asp.Net Core Ocelot Consul 微服务
  5. Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法。
  6. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(8) - 数据类型转换指令
  7. 通过驱动向Excle中写入数据
  8. docker下centos7 systemctl启动报错 docker Failed to get D-Bus connection 报错
  9. 计算机网络数据链路层的错误检测与纠正之海明码的生成,解码
  10. 【百度地图API】如何制作孪生姐妹地图?
  11. Kotlin教程,从入门到精通
  12. 解决车载U盘:USB设备未连接 问题
  13. MLC Flash 笔记
  14. 用户 不在 sudoers 文件中。此事将被报告
  15. Win10电脑桌面壁纸自动变成黑色无法更换怎么解决
  16. Coda:从我们周围的结构中学习
  17. 扩展屏 自定义分辨率方法
  18. 【其他】用ps切片处理素材
  19. oracle支持xp吗,xp系统能装oracle10g吗解决方案
  20. ViSP学习笔记(二十):二维码检测

热门文章

  1. [深度学习]人工神经网络中激励函数作用详解
  2. javascript小技巧amp;amp;JavaScript[对象.属性]集锦 [转载了多篇]
  3. Vue实现简易备忘录
  4. 【转】StretchBlt函数和BitBlt函数的用法
  5. 如何在微信、抖音上线一款小游戏?版权认证新指南!
  6. LeetCode刷题:741. Cherry Pickup —摘樱桃 动态规划
  7. CCriticalSection
  8. 部署在阿里云服务器上的系统也要做等保测评吗?
  9. C++有符号整型和无符号整型的区别
  10. kafka版本历史,含爱奇艺,小米,腾讯,阿里