String和StringBuffer

                            String类

String:表示字符串:

 字符串是常量;它们的值在创建之后不能更改。

  String是一种特殊的引用类型:默认值:null

 构造方法:

       Public String():无参构造

       Public String(byte[] bytes) :将字节数转换成字符串

       Public String(byte[] bytes, int index,intlength):将字节数组的一部分转换成字符串

       public String(char[] value):将字符数组转化成字符串                                    

                      与之相反的方法:toCharArray():将字符串转换成字符

      publicString(char[] value, int index, int count):将字符数组的一部分转换成字符串

      publicString(String original):将一个字符串常量构造成一个字符串对象

常用的方法:

              public int length()返回此字符串的长度

       注意:

数组中没有length()方法,只有length属性

                字符串中有length()方法

                     集合中没有length(),获取集合的元素数:size()

String字符串的最大的特点:字符串一旦被赋值,其值不能被改变

注意这里有一个误区:

package cn.itcast_02;

public class StringDemo2 {
public static void main(String[] args) {
		
		String s = "hello" ;
		s+="world" ;
		System.out.println("s:"+s);
		
		System.out.println("---------------------");
		
		String s1 = "abc" ;
		String s2 = "world" ;
		System.out.println("s1:"+s1+",s2:"+s2);
		//String作为形式参数:它的效果和基本类型是一样的,形式参数的改变对对实际参数没有影响 (它一旦赋值,不能被改变)
		//StringBuffer:字符串缓冲区
		change(s1,s2) ;
		System.out.println("s1:"+s1+",s2:"+s2);
	}

	public static void change(String s1, String s2) {
		
		s1 = s1 +"java" ;
		s2 = s1+"hello" ;
	}
}

注意:

==:比较的是地址值,

equals:默认的比较是地址值,但是String底层重写了equals方法,所以比较的是内容

 

String类的几个常用方法

1>判断功能

             boolean equals(Object obj):将此字符串与指定的对象比较

              boolean equalsIgnoreCase(Stringstr)将此 String 与另一个 String 比较,不考虑大小写

              boolean contains(String str):判断当前大川中是否包含子字符串  (重点)

              boolean startsWith(String str):以当前str字符串开头(重点)

              boolean endsWith(String str):以当前str字符串结尾(重点)

              boolean isEmpty():判断字符串是否为空

              public String concat(String str):字符串的特有功能:拼接功能和+拼接符是一个意思

2>获取功能:

 public int length():获取字符串的长度

 public char charAt(int index)返回指定索引处的 字符

 public int indexOf(int ch)返回指定字符在此字符串中第一次出现处的索引

       注意:'a'和97 都表示a

  publicint indexOf(int ch,int fromIndex)返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。

 public int indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引

 public int indexOf(String str,int fromIndex)回在此字符串中第一次出现指定字符串处的索引,从指定的索引开始搜索。

 3> 截取功能

  publicString substring(int beginIndex):从指定位置开始截取,默认截取到末尾,返回新的字符串

  publicString substring(int beginIndex, int endIndex):从指定位置开始到指定位置末尾结束,包前不包含

4>转换功能:  

  publicbyte[] getBytes() :将字符串转换为字节数组

 public char[] toCharArray() :将字符串转换成字符数组(重点)

 public static String valueOf(int i):将int类型的数据转换成字符串(重点)

 这个方法可以将任何类型的数据转化成String类型

 public String toLowerCase():转成小写

 public String toUpperCase():字符串中所有的字符变成大写

5>其他功能:

 public String replace(char oldChar,charnewChar):将大字符串中的某个字符替换掉成新的字符

 public String replace(String oldStr,StringnewStr):将大串中的某个子字符串替换掉

 public String trim():去除字符串两端空格

public intcompareTo(String anotherString)按字典顺序比较两个字符串

注意:这里介绍的是String类常用的几个方法,若需要详细的学习String类,可借助Api工具学习

 


                                                                StringBuffer类

StringBuffer:线程程安全的可变字符序列

StringBuffer的特点:线程安全 --->同步的---->执行效率低

面试题:

 StringBufferString的区别?

 前者是一个可变的字符序列,后者是不可变的字符序列

如果从内存角度考虑,String定义的时候,会在常量池中开辟空间,比较耗费内存

StringBuffer,字符串缓冲区(里面存储的全部都是字符串),它会释放掉

 StringBuffer的构造方法:

        StringBuffer() :无参构造的形式,初始容量16

        StringBuffer(intcapacity) :指定容量构造一个字符串缓冲区

        StringBuffer(Stringstr) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容

StringBuffer的获取功能:

      publicint length()返回长度

      publicint capacity()返回当前容量 (如果超过容量,系统自动分配(存储字符串的时候,英文的))

 StringBuffer的添加功能

            public StringBufferappend(String/boolean....) :在字符串缓冲区中追加数据(在末尾追加),并且返回字符串缓冲区本身(实际开发中用的多):

            public StringBuffer insert(intoffset,String str):将当前str字符串添加到指定位置处,它返回字符串缓冲区本身

 StringBuffer的删除功能:

             publicStringBuffer deleteCharAt(int index):移除指定位置处的字符..

              public StringBuffer delete(int start,int end):移除从指定位置处到end-1处的子字符串...

StringBuffer的反转功能:

         publicStringBuffer reverse() :将缓冲区中的字符序列反转取代,返回它(字符串冲)本身

StringBuffer的截取功能:

          publicString substring(int start):从指定位置开始截取,默认截取到末尾,返回值不在是缓冲区本身,而是一个新的字符串

           public String substring(int start,intend) :从指定位置开始到指定位置结束截取,包前不包后,返回值不在是缓冲区本身,而是一个新的字符串

 StringBuffer的替换功能:    

            publicStringBuffer replace(int start,int end,String str) :从指定位置到指定位置结束,用新的str字符串去替换,返回值是字符串缓冲区本身



                        String与StringBuffer

1StringBuffer,String,StringBuilder的区别?

       1>StringBuffer和StringBuilder都是一个可变的字符序列,提供一个缓冲区.(两者都看做容器)

       2>StringBuffer:线程安全的,同步的,执行效率低

       3>StringBuilder:线程不安全的,不同步的,执行效率高,并且单线程中优先采用StringBuilder

       4>StringBuffer 执行效率虽然低,但是由于String类型,并且他可变的字符序列,提供了缓冲区

2 StringBuffer和数组的区别?

1>数组:它是可以存储多个数据的容器,并且多个数据的类型必须一致

                     数组长度功能:length属性

2>StringBuffer:它是容器,它在缓冲区始终存储的只能字符串类型的数据

                     获取缓冲区的长度:length()

为什么要类和类之间转换??

    要将A类类型转换成B类型,为了使用B类的功能

    有时候,有需要将B类转换成A类,可能需求需要的是A类型

那么又是如何转换呢?下面我们举例说明


String和StringBuffer之间的相互转换
package it_cast_01;

public class StringBufferTest {

	public static void main(String[] args) {
		
		//String---StringBuffer

		String s = "hello";
		// 方式1 :带参构造,StringBuffer(String str)
		StringBuffer sb = new StringBuffer(s) ;
		//方式2:可以通过无参构造创建字符串缓冲区对象,给缓冲区中追加内容
		StringBuffer sb2 = new StringBuffer() ;
		sb2.append(s) ;
		System.out.println("sb:"+sb);
		System.out.println("sb2:"+sb2);
		System.out.println("----------------------------");
		
		//StringBuffer---String
		StringBuffer buffer = new StringBuffer("world") ;
		//方式1:public String(StringBuffer buffer)分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列
		String str = new String(buffer) ;
		
		//方式2:StringBuffer的功能:public String toString()返回此序列中数据的字符串表示形式
		String str2 = buffer.toString() ;
		
		System.out.println("str:"+str);
		System.out.println("str2:"+str2);
	}
}

通过上面的例子我们可以总结出来String和StringBuffer之间相互转换的方式:

a.String—>StringBuffer

       方式1:带参构造,StringBuffer(String str)

        方式2:可以通过无参构造创建字符串缓冲区对象,给缓冲区中追加内容

b.StringBuffer—>String

       1:public String(StringBuffer buffer)分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列

       方式2:StringBuffer的功能:public String toString()返回此序列中数据的字符串表示形式


Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324854452&siteId=291194637