一、 字符串是一个特殊的对象,它一旦被初始化,就不能够被改变,不能有子类,因此String中的方法都不能被复写;数组
二、 字符串有两种赋值方式多线程
1) String s1 = “abc”; ——在内存中只有一个对对象。app
2) String s2 = new String(“abc”);——在内存中有两个对象,”abc”是一个对象,new又建立了一个对象。函数
三、 equals方法post
Object中的equals方法是用于比较两个对象的地址的,String类中重写了该方法,使得其比较的是具体的对象的值。ui
第二讲字符串经常使用功能编码
一、 字符串在内存中的特性线程
二、 操做字符串的方法3d
2.1 读取方法orm
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方法。
练习:
一、 模拟一个trim方法,去除字符串两端的空格
思路:
1)判断字符串的第一个位置是否为空,若是是继续向下判断,直到不是空格为止;结尾处的空格判断也是如此。
2)当开始和结尾都判断到不是空格了,将先后两处之间的字符取出来,达到去除字符串两端空格的目的。
代码实现以下:
二、 将一个字符串进行翻转。将字符串中指定部分进行翻转
三、 获取一个字符串在另外一个祖父串中出现的次数
四、 获取两个字符串中最大相同字符串。
第三讲 StringBuffer
一、 概述
StringBuffer是一个容器,咱们能够对容器中的数据进行增、删、改、查。当数据类型和数据个数不肯定时,并且最终要变成字符串的时候,就能够用字符串缓冲区。
二、 特色
1) 长度能够变化;
2) 能够直接操做多个数据类型;
3) 最终会经过toString方法变成字符串;
三、 功能
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();
四、 StringBulder与StringBuffer
StringBulder是jdk1.5版本以后才出现的,为了提升单线程运行效率。它与StringBuffer的区别以下:
1) StringBuffer是线程同步的,即,多线程调用时,对缓冲区中数据的操做代码是同步的;而StringBulder是不一样步的。
2) StringBulder不须要判断锁(由于不一样步),提升了运行效率,在单线程下建议使用StringBulder,多线程下建议使用StringBuffer。
总结
一、String和StringBuffer区别
1)String和StringBuffer都有对字符串进行增删改查等操做;
2)String长度和内容都不可变,StringBuffer长度和内容均可变;
3)StringBuffer有反转功能;
二、StringBuffer和StringBuilder的主要区别
1)StringBuffer线程同步,StringBuilder线程不一样步;
2)StringBuffer效率较低,StringBuilder效率较高;
3)多线程时使用StringBuffer,单线程时使用StringBuilder;