黑马程序员——String类

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一、String

final类型的,常量。一旦创建不能被不能被继承

出现原因:方便对char数组进行操作。提供了对字符串的常用操作。

1、字符串存储原理

字符串是常量,一旦创建不能被修改,由于在程序中经常使用,java提供了字符串缓冲机制。

(1)如果使用双音号形式定义一个字符串,这个字符串就会在缓冲区中。

String s1 = “abc”;  //先在字符串缓冲区查找是否有”abc”对象,如果有直接指向,

如果没有,在缓冲区创建。

String s2 = “abc”; //同上

System.out.println(s1 == s2);  //true


(2)如果使用构造函数形式定义一个字符串,那么就不会引用缓冲区中的了,一定会创建一个新的。

String s1 = new String(“abc”);//缓冲去外创建对象,用s1指向。然后查找缓冲区内是有存在,不存在,在缓冲区中创建对象

String s2 = new String(“abc”);//缓冲区外创建对象,用s2指向。然后查找缓冲区内是否存在,存在,不做任何操作

System.out.println(s1 ==s2);  //false

2、字符串相加

(1)两个字符串相加是通过StringBuffer实现的,返回的是一个由构造函数创建的字符串。

System.out.println(s3== s4); //false.

(2)在定义两个字符串的时候直接用两个字符串常量相加,编译时会自动改为一个字符串。

      

编译时改为 String s = “abc”;

String s = “ab”+”c”; 

(3)如果将一个对象和一个字符串相加,返回的是这个对象的toString()结果和这个字符串相连。

3String类的构造函数

(1)将字节数组解码成字符串:String(byte[] b)

byte[]arr = {97,98,99};

String s = newString(arr);  //使用默认码表GBK码表解码,英文解为1个字节,中文解为两个字节

System.out.println(s);   // abc

(2)用指定码表将字节数组解码成字符串:String(byte[] b, String charSetName);

byte[]arr = {97,98,99};

String s = new String(arr,“UTF-8”); //UTF-8码表解码,英文解为1个字节,其他字符解为3个字节

(3)用指定码表将字节数组中的一部分字节解码成字符串:

String(byte[] b, int startIndex, int length,码表)

String s = new String(arr,1,3,”UTF-8”);  //UTF-8码表解码,从1号索引开

始,取3个字节(1个汉字)

(4)将字符数组组装成字符串:String(char[] c);

char[]c = {‘’, ‘’, ‘’, ‘’};

Strings = new String(c);   //得到字符串吃饭了嘛

(5)将字符数组中的一部分组装成字符串:String(char[] c, int startIndex, int length)

String s = new String(c,0, 3);  //将字符串从0号索引开始,取3个字符

(6)通过StringBuffer构建字符串

    StringBuffer sb = new StringBuffer();

    sb.append("abc");

    sb.append("def");

    String s3=new String(sb); //在缓冲区外创建对象,在缓冲区内创建对象

    String s4 = sb.toString(); //在缓冲区外创建对象,缓冲区内已有,不创建

    System.out.println(s3); //abcdef

    System.out.println(s4);  //abcdef

    System.out.println(s3 == s4); //false

4String类的常用方法

int    compareTo(anthorString);  // 按自然顺序比较字符串

char   chatAt(int index);  //获取指定索引上的字符

char[]  toCharArray();    //将字符串转为字符数组

String  conCat(String s);   //s字符串连接到字符串末尾

String  replace(String s1, String s2);  //将指定的s1字符串替换为s2

String  subString(int beginIndex, int endIndex);   //截取子串

int    length();         //获取字符串的长度

byte[]  getBytes();       //编码。使用默认码表将字符串转为字节数组

String[]   split(分隔符);  //将字符串分割成字符串数组

分隔符是正则表达式,如果是 需要写成\\.

String  toLowerCase();   //转为小写

String  toUpperCase();   //转为大写

String  trim();          //去掉字符串的前后空白

boolean  contains(String s);      //是否包含s字符串

boolean  endsWith(String s);     //是否以s字符串结尾

boolean  startsWith(String s);     //是否以s字符串开头

int   indexOf(Strings);   //查找子串s第一次出现的位置

int  indexOf(String s, int index); //index号索引开始找子串s第一次出现位置

int  lastIndexOf(String s);   //查找子串s最后一次出现的位置

二、StringBuffer

字符串是常量,能修改,在相加时内部使用StringBuffer操作,效率低。

StringBuffer是一个可以存储字符的容器,其中可以存储若干字符。可以理解为可变的字符串。

StringBuffersb = new StringBuffer();

sb.append(“abc”);

sb.append(“def”);

System.out.println(sb);

常用方法:

sb.delete(int index1, int index2); //删除sb字符串的从index1(包括)号索引到index2(不包括)号索引的所有字符

sb.insert(int index , String s);  //sb字符串的index1号索引开始,插入字符串s

原字符串后移。

sb.append(参数);

sb.reverse();

sb.toString();          

注意:

String类的所有方法都不会改变原字符串的值。如果一个字符串在使用的时候需要改变,就需要用StringBuffer

三、StringBuilder

StringBuilder的功能与StringBuffer完全一样。

StringBuffer是线程安全的,所有方法都是同步的。

StringBuilder是线程不安全的,但是效率高。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值