第七周Java学习总结
一.知识点摘要
1.String类(部分用法)
用字符数组value创建一个String对象 public String(char[] value)
用字符数组以x开始的n个字符创建一个String对象 public String(char chars[], int x, int n)
获取字符串长度 public int length()
获取字符串某一位置的字符 public char charAt(int index)
获取字符串的子串
public String substring(int beginIndex) //该方法从beginIndex位置起, //从当前字符串中取出剩余的字符作为一个新的字符串返回。
public String substring(int beginIndex, intendIndex)//该方法从beginIndex位置起,从当前字符串中//取出到endIndex-1位置的字符作为一个新的字符串返回
2.StringTokenizer类
StringTokenizer是一个用来分隔String的应用类
构造函数
public StringTokenizer(String str);public StringTokenizer(String str, String delim); public StringTokenizer(String str, String delim, boolean returnDelims)
核心方法
public boolean hasMoreTokens();public String nextToken();public String nextToken(String delim);public int countTokens()
多余方法
public boolean hasMoreElements();public boolean hasMoreElements()
这个类实现了Enumeration接口
3.Scanner类
Scanner类提供了多个方法,用于完成字符串的输入
4.StringBuffer类
添加 append(): append(可以添加多种类型 包括基本数据类型); 例如:String、int、double、Boolean等,都可以转变成字符串表示形式。
插入insert(): setCharAt(int index , char ch)方法 ,将索引处的字符修改为ch.
删除delete( , ): 移除此序列的字符串中的字符,该子字符串是从指定的索引start处开始,一直到索引end - 1处,如果end - 1超出最大索引范围则一直到序列尾部。
替换
private static void fun5() {
StringBuffer sb = new StringBuffer();
sb.append("wukong");
sb.replace(0, 4,"tian");
System.out.println(sb);
}
反转
把字符串反转 ;字符串 转到 StringBuffer ,StringBuffer转字符串
private static void fun7() {
String string = "wukong";
// 字符串--->字符串缓冲区
StringBuffer sb = new StringBuffer(string);
sb.reverse();
// 反转后转回字符串
string = sb.toString();
System.out.println(string);
}
5.Date类和Calender类
Date类是唯一的一个代表时间的类
使用Date类代表当前系统时间
Date date = new Date(); System.out.println(date);
使用Date类的默认构造方法创建出来的对象就代表当前的时间,由于Date类覆盖了toString()方法。所以可以直接输出Date类型的对象,显示的结果如下:
Sun Aug 28 10:23:06 CST 2016
使用Date类代表指定时间
Date date = new Date(2016-1900,8-1,28); System.out.println(date);
使用带参的构造方法,可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。显示结果如下:
Sun Aug 28 00:00:00 CST 2016 代表的日期就是2016年8月28号
实际代表的年月日时分秒的日期对象和这个类似。
Calender类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance()方法创建即可。
使用Calendar类代表当前时间
Calendar c = Calendar.getInstance(); System.out.println(c); //返回的是一个Calendar对象
由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。使用该方法获得的Calendar对象就代表当前的系统时间,由于Calendar类toString实现的没有Date类那么直观,所以直接输出Calendar类的对象意义不大。
![](https://img2018.cnblogs.com/blog/1274162/201904/1274162-20190413115821843-44184304.png)
6.日期格式化
<模版字符串>.format(<逗号分割的参数>) format()方法中<模版字符串>的槽除了包括参数序号,还可以包括格式控制信息。此时,操的内部样式格式:{<参数序号>:<格式控制标记>}
7.Math类,BigInteger类,Random类
Math类
Math类在java.lang包中.
常用的方法有
Math.abs(double x)返回x的绝对值.
Math.max(double x,double y)返回x和y的较大者.
Math.pow(double x,double y)返回x的y次幂.
Math.sqrt(double x)返回x的平方根.
Math.log(double x)返回x的自然对数.
Math.asin(double x)返回x的反正弦值.
Math.random()返回0-1之间的随机数(不包含端点).
例如
int x = (int)(Math.random()*b)+a可以获取[a,b]之间的随机整数.
BigInteger类
BigInteger类在java.math包中.
①创建一个BigInteger类对象的方法如下
BigInteger bigInteger = new BigInteger(Strings);
其中s为数字字符串,如果s中含有非数字字符,则会出现异常.
②常用方法如下
bigInteger为一个BigInteger类对象
a. 加 bigInteger.add(BigInteger bi)方法:bigInteger与bi相加.
b. 减 bigInteger.subtract(BigInteger bi)方法:bigInteger减去bi.
c. 乘 bigInteger.multiply(BigInteger bi)方法:bigInteger与bi相乘.
d. 除 bigInteger.divide(BigInteger bi)方法:bigInteger除以bi.
e. 取余 bigInteger.remainder(BigInteger bi)方法:bigInteger除以bi的余数.
f. 绝对值 bigInteger.abs()方法:bigInteger的绝对值.
g. 乘方 bigInteger.pow(int n)方法:bigInteger的n次方
h. 字符串bigInteger.toString(int p)方法:将bigInteger转化为p进制,p可以缺省,缺省值为10.
Random类
用法如下
①获取[a,b]之间随机整数
Random r = new Random();
int x = r.nextInt(b+a+1)+a;
如int x = r.nextInt(21)-10;可以获取[-10,10]之间的随机整数.
②随机获取true/false
boolean b = r.nextBoolean();即可获取一个随机布尔值.
8.数字格式化
format方法
9.Class类和Console类
Class 类是在Java语言中定义一个特定类的实现。一个类的定义包含成员变量,成员方法,还有这个类实现的接口,以及这个类的父类。Class类的对象用于表示当前运行的 Java 应用程序中的类和接口。 比如:每个数组均属于一个 Class 类对象,所有具有相同元素类型和维数的数组共享一个Class 对象。基本的 Java 类型(boolean, byte, char, short,int, long, float 和 double) 和 void 类型也可表示为 Class 对象。
由于Scanner类输入是可见的,故Scanner类不适用于从控制台读取密码。所以用Console类来解决此问题。
二.部分例题运行截图
Example8-6.java
Example8-11.java
Example8-8
如果输入加密密码和解密码不一样则不会解密成功,和密码学的只是有所关联很好的一道题
三. 学习中遇到的困难和解决方法
1.在编译时,还没到结尾就结束了执行。解决方法:经过仔细的观察是因为少打了一个括号导致
四.代码托管
五.学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 68/70 | 0/2 | 20/20 | Linux系统基本入门 |
第二周 | 267/400 | 1/2 | 15/20 | 基本语法的使用 |
第三周 | 760/800 | 1/2 | 12/15 | 包的使用 |
第四周 | 174/1000 | 1/2 | 15/25 | 继承以及子类与父类 |
第五周 | 307/1576 | 2/2 | 12/20 | 接口 |
第六周 | 949/1934 | 3/2 | 14/20 | 内部类与异常类,I/O |
第七周 | 1651/3669 | 2/2 | 12/20 | String类等 |