首页 > 代码库 > 黑马程序员-Java基础---String、StringBuffer、StringBuilder、包装类
黑马程序员-Java基础---String、StringBuffer、StringBuilder、包装类
第一讲概述
1、 字符串是一个特殊的对象,它一旦被初始化,就不可以被改变,不能有子类,所以String中的方法都不能被复写;
2、 字符串有两种赋值方式
1) String s1 = “abc”; ——在内存中只有一个对对象。
2) String s2 = new String(“abc”);——在内存中有两个对象,”abc”是一个对象,new又创建了一个对象。
3、 equals方法
Object中的equals方法是用于比较两个对象的地址的,String类中重写了该方法,使得其比较的是具体的对象的值。
第二讲字符串常用功能
1、 字符串在内存中的特性
2、 操作字符串的方法
2.1 读取方法
l int length()——获取字符串长度;
l char charAt(int index)——根据位置获取位置上某个字符;
l int indexOf(int ch)——返回ch在字符串中第一次出现的位置;
l int indexOf(int ch,int fromIndex)——从fromIndex指定位置开始,获取ch在字符串中第一次出现的位置;
l int indexOf(String str)——返回str在字符串中第一次出现的位置;
l int indexOf(String str,int fromIndex)——从fromIndex指定位置开始查找,返回str在字符窜中第一次出现的位置;
l int lastIndexOf(int ch)——返回ch自字符串中最后一次出现的位置
2.2 判断操作
l boolean contains(str)——判断字符串中是否包含str;
l boolean isEmpty();——判断字符串中是否有内容。其原理是判断字符串长度是否为0;
l Boolean startsWith(str)——判断字符串是否以str开头。
l Boolean endsWith(str)——判断字符串是否以str结尾。
l Boolean equals(str)——判断字符串内容是否相同。Object类中的equals方法。
l Boolean equalsIgnoreCase(str)——判断内容是否相同,并且忽略了大小写。
2.3 字符串与其他数据类型互相转换
l 将字符串转成字符串:
方法一:构造函数方法
String(char[] ch )
String(char[] ch,int offset,int count)——将字符串数组中的一部分转成字符串。
方法二:静态方法
Static String copyValueOf(char[] ch)
Static String copyValueOf(char[] , int offset, int count)
l 将字符串转成字符数组
Char[] toCharArray();
l 将字节数组转成字符串——构造函数方法实现
String(byte[] b);
String(byte[] b,int offset , int count)
l 将字符串转成字节数组
Byte[] getBytes();
特殊情况:字符串和字节数据在转换过程中,可以指定编码表。
l 将基本数据类型转成字符串
Static String valueOf(int i)——将int类型数据转成字符串
Static String valueOf(double d)——将double型数据转成字符串
2.4 替换字符串中的某个字符
String replace(oldchar , newchar).
2.5 根据指定字符将字符串切割成多个字符串
String[] split(regex);
2.6 获取字符串中的一部分
String substring(begin)——获取字符串中从begin以后的所有字符。
String substring(begin , end)——获取字符串中从begin(包含)开始到end(不包含)之间的字符。
2.7 大小写转换,去除空格,字符串自然顺序比较
l 大小写转换
String toUpperCase()——将字符串转成大写;
String toLowerCase()——将字符串转成小写;
l 将字符串两端的多个空格去除
String trim();
l 对两个字符串进行自然顺序比较
Int compareTo(String);——字符串重写了Comparable接口中的compareTo方法。
练习:
1、 模拟一个trim方法,去除字符串两端的空格
思路:
1)判断字符串的第一个位置是否为空,如果是继续向下判断,直到不是空格为止;结尾处的空格判断也是如此。
2)当开始和结尾都判断到不是空格了,将前后两处之间的字符取出来,达到去除字符串两端空格的目的。
代码实现如下:
2、 将一个字符串进行翻转。将字符串中指定部分进行翻转
3、 获取一个字符串在另一个祖父串中出现的次数
4、 获取两个字符串中最大相同字符串。
第三讲 StringBuffer
1、 概述
StringBuffer是一个容器,我们可以对容器中的数据进行增、删、改、查。当数据类型和数据个数不确定时,而且最终要变成字符串的时候,就可以用字符串缓冲区。
2、 特点
1) 长度可以变化;
2) 可以直接操作多个数据类型;
3) 最终会通过toString方法变成字符串;
3、 功能
1) 存储
StringBuffer append()——将指定数据作为参数添加到已有数据结尾处
StringBuffer insert(index,数据)——将数据插入到指定的位置(index);
2) 删除
StringBuffer delete(int start,int end)——删除缓冲区中的数据,包含start,不包含end;
StringBuffer deleteCharAt(index)——删除指定位置的字符
3) 获取
Char charAt(int index);——返回指定位置处的字符
Int indexOf(String str)——查找字符串str在容器中第一次出现的位置
Int lastIndexOf(String str)——查找字符串str在容器中最后一次出现的位置
Int length()——获取容器的长度
String substring(int start, int end)——获取缓冲区中从start(包含)到end(不包含)的数据。
4) 修改
StringBuffer repace(start,end,String)——利用string替换容器中从start(包含)到end(不包含)的数据。
Void setCharAt(int index, char ch)——将缓冲区中index位置处的数据替换成ch。
5) 反转
StringBuffer reverse();
4、 StringBulder与StringBuffer
StringBulder是jdk1.5版本之后才出现的,为了提高单线程运行效率。它与StringBuffer的区别如下:
1) StringBuffer是线程同步的,即,多线程调用时,对缓冲区中数据的操作代码是同步的;而StringBulder是不同步的。
2) StringBulder不需要判断锁(因为不同步),提高了运行效率,在单线程下建议使用StringBulder,多线程下建议使用StringBuffer。
第四讲 基本数据类型对象包装类
1、 概述
将基本数据对象及其操作进行包装。
2、 基本数据类型包装类的作用
包装类的出现是为了编译对基本数据类型数据的操作,如,我们可以直接利用整形包装类获得整形的最大数,也可以利用包装类中的方法直接将其他类型数据转换成整形。常见的基本数据对象类型包装类对应如下:
3、 包装类新特性
1) 十进制转成其他进制
toBinaryString()——将十进制转成二进制;
toHexString()——将十进制转成十六进制;
toOctalString()——将十进制转成八进制;
2) 其他进制转成十进制
Integer.parseInt(String,radix)——其中radix为基数,若sring为二进制数,radix值为2;若string为十六进制数,radix为16;若string为八进制数,radix为8;
3) 自动装箱/拆箱
Interger x = 4;——这是一个自动装箱的过程,等同于Integer x = new Integer(4);
x = x + 5;——这句话经历了自动拆箱和和装箱的过程。等号右边的x是一个引用类型数据,在运算时,自动变成int类型与5相加,然后再进行装箱,赋给等号左边的x。
4) Integer对象在内存中的存储
Integer m = 127;
Integer n = 127;
System.out.println(m == n);//结果是true
Integer a = 128;
Integer b = 128;
System.out.println(a == b);//结果是false
造成以上结果不同的原因是:当数值在byte范围内(整形小于等于127)时,对于新特性,如果该数值已经存在,则不会再开辟新的空间,即m和n指向了同一个对象。
总结
1、String和StringBuffer区别
1)String和StringBuffer都有对字符串进行增删改查等操作;
2)String长度和内容都不可变,StringBuffer长度和内容都可变;
3)StringBuffer有反转功能;
2、StringBuffer和StringBuilder的主要区别
1)StringBuffer线程同步,StringBuilder线程不同步;
2)StringBuffer效率较低,StringBuilder效率较高;
3)多线程时使用StringBuffer,单线程时使用StringBuilder;
3、基本数据类型对象包装类
1)方便了对基本数据的操作,若进制转换、基本数据类型之间的转换等;
2)基本数据类型还有自动装箱和拆箱功能;
黑马程序员-Java基础---String、StringBuffer、StringBuilder、包装类