首页 > 代码库 > 黑马程序员-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、包装类