------- android培训、java培训、期待与您交流! ----------
1 String和StringBuffer类
字符串指的是一连串的字符,它是由许多单个字符连接而成。字符串中可以包含任意字符,这些字符必须包含在一对双引号“”之内,在Java中定义了String和StringBuffer两个类来封装字符串,并提供了一系列操作字符串的方法,它们都位于java.lang包中,因此不需要导包就可以直接使用。
1.1 String类的初始化
1 使用字符串常量直接初始化一个String对象:
String str = “abc”;
2 使用String的构造方法
方法声明 | 功能描述 |
new String | 创建一个内容为空的字符串 |
new String(char[] value) | 根据指定的字符数组创建对象 |
new String(String value) | 根据指定的字符串内容创建对象 |
需要注意的是,直接赋值与new String对象是有区别的,区别如下:
注意,字符串一旦被初始化就不可被改变!
1.2 String的基本操作
1.2.1 获取
方法声明 | 功能描述 |
int length() | 获取字符串长度,与数组不同需要带() |
char charAt(int index) | 根据索引获取对应的字符 |
int indexOf(String str) | 获取str第一次出现的位置 |
int indexOf(String str,int fromIndex) | 从fromIndex开始获取str第一次出现的位置 |
int indexOf(int ch) | 获取ch第一次出现的位置(ch是ASCⅡ码) |
int indexOf(int ch,int fromIndex) | 从fromIndex开始获取str第一次出现的位置 |
int lastIndexOf(String str) | 获取str最后一次出现的位置 |
1.2.2 判断
方法声明 | 功能描述 |
boolean contains(String str) | 判断字符串是否包含str |
boolean isEmpty() | 判断字符串是否为null |
boolean startsWith(String str) | 判断字符串是否以str开头 |
boolean endsWith(String str) | 判断字符串是否以str结尾 |
boolean equals(String str) | 判断两个字符串是否相同 |
boolean equalsIgnoreCase(String str) | 判断两个字符串是否相同并忽略大小写 |
int compareTo(String str) | 对两个字符串进行自然顺序的比较 |
1.2.3 转换
方法声明 | 功能描述 |
new String(char[] ch) | 将字符数组转换为字符串 |
new String(char[] ch,int start,int count) | 将其一部分转换(start位开始,长度为count) |
char[] toCharArray() | 将字符串转换为字符数组 |
new String[byte[] by] | 将字节数组转换为字符串 |
new String[byte[] by,int start,int count] | 将其一部分转换(start位开始,长度为count) |
byte[] getBytes() | 将字符串转换为字节数组 |
String toUpperCase() | 将字符串转换为大写 |
String toLowerCase() | 将字符串转换为小写 |
1.2.4 操作
方法声明 | 功能描述 |
String replace(String old,String new) | 将old改为new,成为一个新字符串 |
String[] split(String regex) | 将字符串以regex切割成字符串数组 |
String substring(int start) | 从start到最后取子串(包含头) |
String substring(int start,int end) | 从start到end取子串(包含头不包含尾) |
String trim() | 去除原字符串的字符串间的空格 |
1.3 StringBuffer类
StringBuffer类也称作字符串缓冲区,StringBuffer类和String类最大的区别在于它的内容和长度都是可以改变的,StringBuffer类似一个字符容器,当在其中添加或删除字符时,并不会产生新的StringBuffer对象。
1.3.1 存储
方法声明 | 功能描述 |
new StringBuffer(String str) | 将str转换为StringBuffer类 |
StringBuffer append(String str) | 将str添加到StringBuffer末尾 |
StringBuffer insert(int index,String str) | 将str添加到index位置 |
void getChars(int sta,int end,char[] ch,int sta) | 将sta,end之间的添加到sta位置的字符数组 |
1.3.2 修改
方法声明 | 功能描述 |
StringBuffer delete(int start,int end) | 删除start,end间的数据,包含头不包含尾 |
StringBuffer deleteCharAt(int index) | 删除index位置的数据 |
StringBuffer replace(int start,int end,String str) | 把start,end间的数据修改为str |
void setCharAt(int index,char ch) | 把index位置的字符修改为ch |
StringBuffer reverse() | 将StringBuffer反转 |
1.3.3 获取
方法声明 | 功能描述 |
char charAt(int index) | 获取index位置的字符 |
int indexOf(String str) | 获取str第一次出现的位置 |
Int lastIndexOf(String str) | 获取str最后一次出现的位置 |
int length() | 获取StringBuffer的长度 |
String substring(int start,int end) | 获取start,end间的字符串,包含头不包含尾 |
注意:JDK1.5版本后出现StringBuilder,StringBuffer是同步的,比较安全,StringBuilder不是同步的,但是效率比较高,建议使用StringBuilder
1.4 String和StringBuffer的对比
1 String类表示的字符串是常量,一旦创建后,内容和长度都是无法改变的,而StringBuffer表示字符串容器,其内容和长度都是可以改变的.。操作字符串时,如果仅需要表示数据类型,使用String类即可,如果需要对字符串的字符进行修改,则使用StringBuffer类
2 String类覆盖了Object类的equals()方法,而StringBuffer类没有覆盖Object类的equals方法。
3 String类对象可以用操作符+进行连接,而StringBuffer类对象之间不能
运行结果: true abcabc
false
2 System类与Runtime类
2.1 System类
System类定义了一些与系统相关的属性和方法,它所提供的属性和方法都是静态的,因此想要引用这些属性和方法直接使用System类调用即可。
方法声明 | 功能描述 |
static void exit(int status) | 终止虚拟机,status非0则异常终止 |
static void gc() | 运行垃圾回收器对垃圾进行回收 |
static long currentTimeMillis() | 返回以毫秒为单位的当前时间 |
static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length) | 拷贝数组 |
static Properties getProperties() | 取得当前的系统属性 |
static String getProperty(String key) | 获取指定键描述的系统属性 |
下面重点说下arraycopy()的用法:
运行结果:0:1 1:2 2:3 3:4 4:5 5:6 6:11 7:12
arraycopy()方法用于拷贝数组,src代表源数组,srcPos表示源数组中拷贝元素的起始位置,dest表示目标数组,destPos表示拷贝到目标数组的起始位置,length表示拷贝元素的个数,需要注意的是,在进行数组拷贝时,目标数组必须有足够的空间来存放拷贝的元素,并且拷贝元素的个数不能超过源数组的末尾角标,否则会发生角标越界异常。
2.2 Runtime类
Runtime类表示虚拟机运行时的状态,它用于封装JVM虚拟机进程,每次用java命令启动虚拟机都对应一个Runtime实例,并且只有一个实例,因此该类采用单例设计模式进行设计,对象不可以被直接实例化,需要通过以下方式:
Runtime run = Runtime.getRuntime();
3 Math类与Random类
3.1 Math类
运行结果:
需要注意的是round()方法返回的是一个int值,而ceil()方法和floor()方法返回的是double类型的数。
3.2 Random类
在JDK的java.util包中有一个Random类,它可以在指定的范围内随机产生数字,在Random类中提供了两个构造方法,具体方法如下所示:
方法声明 | 功能描述 |
new Random() | 构造方法,用于创建一个伪随机数生成器 |
new Random(long seed) | 构造方法,使用一个long型的seed种子 |
boolean nextBoolean() | 随机生成boolean类型的随机数 |
double nextDouble() | 随机生成double类型的随机数 |
float nextFloat() | 随机生成float类型的随机数 |
int nextInt() | 随机生成int类型的随机数 |
int nextInt(int n) | 随机生成int类型的随机数,范围0-n |
long nextLong() | 随机生成long类型的随机数 |
演示:
运行结果:
4 包装类
在Java中很多类的方法都需要接收引用类型的对象,此时无法将一个基本数据类型的值传入,为了解决上述问题,Java的JDK中提供了一系列的包装类,通过这些包装类可以将基本数据类型的值包装为引用数据类型的对象,如下所示:
基本数据类型 | 对应的包装类 | 基本数据类型 | 对应的包装类 |
byte | Byte | long | Long |
char | Character | double | Double |
int | Integer | float | Float |
short | Short | boolean | Boolean |
Integer类的特有方法
方法声明 | 功能描述 |
String toBinaryString(int i) | 将十进制数转化为二进制参数的字符串 |
String toHexString(int i) | 将十进制数转化为十六进制参数的字符串 |
String toOctalString(int i) | 将十进制数转化为八进制参数的字符串 |
Integer valueOf(int i) | 装箱 |
Integer valueOf(String s) | 将字符串转化为对应Integer对象 |
int parseInt(String s) | 将字符串转化为基本数据类型 |
int intValue() | 拆箱 |
包装类和基本数据类型在进行转换时,引入了装箱和拆箱的概念,其中装箱是指将基本数据类型的值转为引用数据类型;反之,拆箱是指将引用数据类型的对象转为基本数据类型。
使用包装类时,需要注意以下几点:
1 包装类都重写了Object类中的toString()方法,以字符串的形式返回被包装的基本数据类型的值
2 除了Character外,包装类都有valueOf(String s)方法,将字符串转换为对应的包装类对象,如 Double d = Integer.valueOf(“5.5”)
3 除了Character外,包装类都有parseXXX(String s)方法,将字符串转换为对应的基本数据类型。
4.1 自动装箱和拆箱
JDK5.0后提供了自动装箱和拆箱技术,也就是可以自动进行基本数据类型与包装类对象之间的转换,基本数据类型与包装类对象也能够进行混合运算了。
运行结果: 40
5 关于日期的操作的类
5.1 Date类
在JDK的util包中提供了个Date类用于表示日期和时间,Date类大部分构造方法都被声明已过时,只有两个构造方法是建议使用的,分别是:
Date date1 = new Date;
Date date1 = new Date(long date)
其中date参数表示1970年1月1日00:00:00(称为历元)以来的毫秒数,即时间戳。
由于Date类在设计之初没有考虑到国际化问题,因此JDK1.1开始,Calendar类取代了Date类大部分功能。
5.2 Calendar类
Calendar类用于完成日期和时间字段的操作,它可以通过特定的方法设置和读取日期的特定部分,比如年、月、日、时、分、秒等。Calendar类是一个抽象类,不可以被实例化,只能调用静态方法getInstance()来得到一个Calendar对象。
Calendar calendar = Calendar.getInstance();
Calendar的常用方法:
方法声明 | 功能描述 |
int get(int field) | 返回指定日历字段的值 |
Void add(int field,int amount) | 根据日历规则添加或减去时间量 |
Void set(int field,int value) | 为指定日历字段设置指定值 |
Void set(int year,int month,int date) | 设置年、月、日 |
Void set(int year,int month,int date,int hour,int minute,int second) | 设置年、月、日、时、分、秒 |
注意,参数field需要接收Calendar类中定义的常量值,这些常量值分别表示不同的字段,如Calendar.YEAR表示年份,Calendar.MONTH表示月份,Calendar.SECOND表示秒等。其中在使用Calendar.MONTH字段时尤其要注意,月份的起始值是从0开始而不是1。
假设一项工程从2008年8月8日开始,100天后结束,求竣工时间:
5.3 SimpleDateFormat类
SimpleDateFormat类可以使用new关键字创建实例对象,它的构造方法接收一个格式字符串参数,表示日期格式模板。
运行结果:
公元2015年05月17日20时37分57秒:今天是2015年的第137天,星期日
5.3.1 将字符串解析成Date对象
运行结果:Fri Aug 03 00:00:00 CST 2012