数字与字符串精讲
装箱与拆箱
所有的基本类型都有对应的类类型
比如int对应的类时Integer,这种类就叫做封装类
Integer能表现出一个数有没有赋值,但是int不能表示,int只能表示0但是不能表示null
Number类
所有的数字类的封装类都是Number类的字类
Byte,Short,Integer,Long,Float,Double
类型转换
- 基本类型转封装类
Integer i = new Integer(3);
不需要调用构造方法,通过=符号自动把 基本类型 转换为 类类型 就叫装箱装箱可以且仅可以和对应类进行转换,尽管byte和int可以在小范围自动转换,但是byte没办法直接和Integer进行装箱
Integer i = 3; - 封装类转基本类型
int i = it.intValue();
简单函数
Byte.MAX_VALUE
字符串转换
数字转字符串
方法一:使用String类的静态方法valueOf
例如:
int i=3;
String str = String.ValueOf(i);
方法二:先把基本类型装箱为对象,然后调用对象的toString
int i = 3;
Integer it = i;
String str = it.toString();
字符串转数字
调用封装类的静态方法parseInt
String str = "999";
int i = Integer.ParseInt(str);
Math的常用方法
方法名 | 作用 |
---|---|
round | 四舍五入 |
random | 在零到1之前取随机数,取不到1 |
random()*10 | 在0到10之间取随机数,取不到10 |
sqrt() | 开方 |
pow() | 次方 |
E | 自然阐述 |
PI | Π |
格式化输出
Sysstem.out.printf(str,参数,参数);
%s字符串%d整数%n换行
对于printf函数来说,printf函数直接调用了format函数,所以format和printf函数最后效果一样
//总长度,左对齐,补0,千位分隔符,小数点位数,本地化表达
//直接打印数字
System.out.format("%d%n",year);
//总长度是8,默认右对齐
System.out.format("%8d%n",year);
//总长度是8,左对齐
System.out.format("%-8d%n",year);
//总长度是8,不够补0
System.out.format("%08d%n",year);
//千位分隔符
System.out.format("%,8d%n",year*10000);
//小数点位数
System.out.format("%.2f%n",Math.PI);
//不同国家的千位分隔符
System.out.format(Locale.FRANCE,"%,.2f%n",Math.PI*10000);
System.out.format(Locale.US,"%,.2f%n",Math.PI*10000);
System.out.format(Locale.UK,"%,.2f%n",Math.PI*1000##0);
字符
*第01章
字符型变量只能存一个字符char a = 'ab’就是错误的。
char对应的封装类是Character
Character常用的方法
方法名 | 作用 |
---|---|
isLetter | 是不是一个字符 |
isDigit | 是不是一个数字 |
isWhitespace | 是不是空白 |
isUpperCase | 是不是大写字符 |
isLowerCase | 是不是小写字符 |
字符转换成字符串类型
String a = ‘a’;是不行的
需要调用Character的toString方法
String a2 = Character.toString(‘a’)
字符串
字符串是一个类,所以我们见到的字符串都是对象,常见的创建字符串对象的方式有三种:
当一个字面值出现的时候,虚拟机就会创建一个字符串。
调用String 的构造方法创建一个字符串对象。
通过+号进行字符串拼接也会创建新的字符串对象
String garen ="盖伦"; //字面值,虚拟机碰到字面值就会创建一个字符串对象
String teemo = new String("提莫"); //创建了两个字符串对象
char[] cs = new char[]{'崔','斯','特'};
String hero = new String(cs);// 通过字符数组创建一个字符串对象
String hero3 = garen + teemo;// 通过
immutable && final
String创建的字符串类型是immutable表示:
不能增加长度,不能减少长度,不能插入字符,不能删除字符,不能修改祖父
String类型表现类似于常量
字符串格式化
如果不使用字符串格式化,就需要进行字符串连接,如果变量比较多,拼接就会显得繁琐
使用字符串格式化,就可以简洁明了
使用String的format函数
String name ="盖伦";
int kill = 8;
String title="超神";
//直接使用+进行字符串连接,编码感觉会比较繁琐,并且维护性差,易读性差
String sentence = name+ " 在进行了连续 " + kill + " 次击杀后,获得了 " + title +" 的称号";
System.out.println(sentence);
//格式化字符串
//%s表示字符串,%d表示数字,%n表示换行
String sentenceFormat ="%s 在进行了连续 %d 次击杀后,获得了 %s 的称号%n";
String sentence2 = String.format(sentenceFormat, name,kill,title);
length()函数返回字符串长度
字符和数字可以相互转换
字符串常用方法
关键字 | 作用 |
---|---|
chatAt | 获取字符 |
toCharArray | 获取对应的字符数组 |
subString | 截取子字符串 |
split | 分隔,得到的结果是String[]数组 |
trim | 去掉首尾空格 |
toLowerCase/toUpperCase | 大小写转换 |
indexOf/lastIndexOf/contains | 定位 |
replaceAll/replaceFirst | 替换 |
比较字符串
判断字符串是不是相同,不能单纯的使用==。
==是判断是不是同一个对象的方法,对于String类型来说,如果没有新的字面值,String类型是不会创建新的对象的,而真正判断两个字符串内容是不是相等的方法,是使用equals,如果使用euqalsIgnoreCase函数则可以忽略大小写判断内容是不是一致。
是否以字符串开始或者结束,startsWith函数和endsWith函数判断是不是以字符串开始或者结束
StringBuffer
是可变长的字符串
常用方法有:append,delete,reverse,insert,增加删除反转插入
length获取长度 capacity获取当前容量
- 有关性能的研究
Date类
java.util.Date非java.sql.Date类,此类是给数据库访问使用的
所有的数据类型,无论是整数,布尔,浮点数还是字符串,最后都需要以数字的形式表现出来。
日期类型也不例外,换句话说,一个日期,比如2020年10月1日,在计算机里,会用一个数字来代替。
那么最特殊的一个数字,就是零. 零这个数字,就代表Java中的时间原点,其对应的日期是1970年1月1日 8点0分0秒 。 (为什么是8点,因为中国的太平洋时区是UTC-8,刚好和格林威治时间差8个小时)
为什么对应1970年呢? 因为1969年发布了第一个 UNIX 版本:AT&T,综合考虑,当时就把1970年当做了时间原点。
所有的日期,都是以为这个0点为基准,每过一毫秒,就+1。
创建日期对象
方法一:无参构造,表示当前的事件对象
Date d = new Date();
方法二:有参构造,表示从1970年1月1日8点开始经历的毫秒数
Date d1 = new Date(5000);
主要方法
-
getTime()得到一个Long类型的数值,表示从1970年1月1日8点开始经历的毫秒数
可以用来评估程序运行时间 -
System.currentTimeMillis()和Date.getTime()是一样的
日期类型格式化类
SimpleDateFormat类
关键字 | 作用 |
---|---|
format | 日期转字符串 |
parse | 字符串转日期 |
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
//y 代表年
//M 代表月
//d 代表日
//H 代表24进制的小时
//h 代表12进制的小时
//m 代表分钟
//s 代表秒
//S 代表毫秒
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS" );
//定义数据格式
Date d= new Date();
String str = sdf.format(d);
System.out.println("当前时间通过 yyyy-MM-dd HH:mm:ss SSS 格式化后的输出: "+str);
SimpleDateFormat sdf1 =new SimpleDateFormat("yyyy-MM-dd" );
Date d1= new Date();
String str1 = sdf1.format(d1);
System.out.println("当前时间通过 yyyy-MM-dd 格式化后的输出: "+str1);
}
}
Calendar类
常用于翻日历,比如下个月的今天是多久
采用单例模式来获取日历对象
Calendar c = Calendar.getInstance();//调用单例函数获取当前的日历对象
Date d = c.getTime()//获取当前的时间
c.setTime(d)//把日历调成日期
获取下个月的今天
c.add(Calendar.MONTH,1)
去年的今天
c.add(Calendar.YEAR,-1)
上个月的第三天
c.add(Calendar.MONTH,-1)
c.set(calendr.Date,3)
获取下个月倒数第三天
c.add(Calendar.DAY_OF_MONTH,-3)