JAVA基础(20)-String,StringBuffer,StringBuilder

String

       (底层是字符数组+对数组的操作)

       特点:
           (1)是不可变的字符串类型,(不可变:对象的内容不能更改)
           (2)final修饰的类型
           (3)字符下标(索引/index)从0开头
           (4)重写了equals方法和toString方法
           (5)默认使用的是unicode字符集,任意字符都占两个字节。

       构造器:
           String()  创建一个空字符序列的字符串对象
           String(byte[] bs)   创建一个字符串对象。使用默认字符集进行解码的字符串。
           String(byte[] bs,String charset)   将字节数组使用指定字符集进行解码成相应的字符串对象
           String(char[] ch)   将字符数组转换成字符串对象
           String(String str)   指定一个字符串字面量创建一个字符串对象
       常用方法:
           int length()   返回字符串对象的字符个数
           char charAt(int index)   返回此字符序列中指定索引处的字符
           String concat(String another)   将指定字符串another拼接到此字符序列的末尾,返回新对象
           boolean stratsWith(String prefix)/endsWith(String suffix)   查看此字符序列是否以prefix为前缀/以suffix为后缀
           byte[ ] getBytes()   将此字符串按照默认字符集编码成字节序列,返回一个新的字节数组
           byte[ ] getBytes(String charset)   将此字符串按照指定的字符集编码成字节序列,返回新的字节数组
           int indexOf(String str)/indexOf(String str, int fromIndex)   查找字符串中的字符/子字符串的位置
           int indexOf(int ch)   返回字符ch在此字符串中第一次出现的下标(索引/位置)
           int intexOf(int ch,int fromIndex)   返回字符ch从此字符串fromIndex下标开始,往后第一次出现的位置


           int indexOf(String str):
           
int indexOf(String str,int fromIndex)
  注意:返回-1,说明要找字符/子字符串 不存在查找序列中


           int lastIndexOf(int ch);
           
int lastIndexOf(String str)
           
int lastIndexOf(int ch,int endIndex)
           
int lastIndexOf(String str,int endIndex)
  查找字符/子字符串截止到某一下标时,最后一次出现的位置。
          上述四个方法:查找字符/子字符串在此字符序列中最后一次出现的位置,找不到返回-1
      
          截取子字符串的方法:
           String substring(int beginIndex)   从此字符序列的beginIndex开始截取,截取到最后
           String substring(int beginIndex,int endIndex)   从此字符序列的beginInde开始截取,截取到endIndex,包前不包后
  
          字符串转成字符数组的方法:
           char[ ] toCharArray()   将此字符序列变成字符数组  
 
          字符串中的字母转成大写/小写
           String toUpperCase()    将字符串中的字母都变成大写,返回新字符串
           String toLowerCase()    将字符串中的字母都变成小写,返回新字符串 


          前后去空格的方法:
           String trim()   去掉此字符序列的前与后的空格 


          将任意参数变成字符串对象
           static String valueOf(Type v)   将参数v变成字符串对象      

 
          equals方法与==的区别
               ==:用来比较是不是同一个对象 
               equals:用来比较两个对象的内容是否相同
  
         String类型中重写了equals方法

==============================================================================================

先介绍一些Buffer

Buffer 类是 java.nio 的构造基础。一个 Buffer 对象是固定数量的数据的容器,其作用是一个存储器,或者分段运输区,在这里,数据可被存储并在之后用于检索。缓冲区可以被写满或释放。对于每个非布尔原始数据类型都有一个缓冲区类,即 Buffer 的子类有:ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer 和 ShortBuffer,是没有 BooleanBuffer 之说的。尽管缓冲区作用于它们存储的原始数据类型,但缓冲区十分倾向于处理字节。非字节缓冲区可以在后台执行从字节或到字节的转换,这取决于缓冲区是如何创建的。

StringBuilder

       可变字符串类型:(字符串:底层是字符数组,及其对数组的操作)
       特点:
           (1)此类型是final修饰的
           (2)没有重写equals方法
           (3)此类型提供的大多数方法都带有返回值,
               即:  return this  返回同一个地址
       构造器:
           StringBuilder()    构造了一个空的StringBuilder对象,初始容量为16。
           StringBuilder(String str)   创建一个指定字符串的StringBuilder对象
       常用方法:
           int length()   返回有效字符的长度。
           StringBuilder append(Type a)   将参数a追加到StringBuilder对象里,返回此对象
           StringBuilider insert(int index,Type a)   将参数a插入到对象的下标index处 
           StringBuilder  delete(int start,int end)   删除此对象里的部分字符,从start开始,到end结束,注意:包前不包后     
           StringBuilder replace(int start,int end,String str)   使用str替换此对象从start开始到end结束的子串
           StringBuilder reverse()   将StringBuilder对象的内容进行翻转

练习代码

public static void main(String[] args) {
		// TODO Auto-generated method stub
		StringBuilder sb = new StringBuilder();
		System.out.println("初始长度:"+sb.length());
		System.out.println("初始容量:"+sb.capacity());
		//追加字符串
		sb.append("java");
		System.out.println("追加后:"+sb);
		//插入
		sb.insert(0,"hello");
		System.out.println("插入后:"+sb);
		//替换
		sb.replace(5, 6, ",");
		System.out.println("替换后:"+sb);
		//删除
		sb.delete(5,6);
		System.out.println("删除后:"+sb);
		//反转
		sb.reverse();
		System.out.println("反转后:"+sb);
		System.out.println("当前字符串长度:"+sb.length());
		System.out.println("当前容量:"+sb.capacity());
		//改变StringBuilder的长度,将只保留前面部分
		sb.setLength(5);
		System.out.println("改变长度后:"+sb);
		
	}


      
StringBuffer

       此类与StringBuilder用法一模一样。
       但是:
         在线程安全上考虑:StringBuffer线程安全,StringBuilder线程不安全
         在执行效率上:StringBuffer效率低,StringBuilder效率高   

练习代码

public static void main(String[] args) {
		// TODO Auto-generated method stub
		StringBuffer sb = new StringBuffer();
		System.out.println("初始长度:"+sb.length());
		System.out.println("初始容量:"+sb.capacity());
		//追加字符串
		sb.append("java");
		System.out.println("追加后:"+sb);
		//插入
		sb.insert(0,"hello");
		System.out.println("插入后:"+sb);
		//替换
		sb.replace(5, 6, ",");
		System.out.println("替换后:"+sb);
		//删除
		sb.delete(5,6);
		System.out.println("删除后:"+sb);
		//反转
		sb.reverse();
		System.out.println("反转后:"+sb);
		System.out.println("当前字符串长度:"+sb.length());
		System.out.println("当前容量:"+sb.capacity());
		//改变StringBuffer的长度,将只保留前面部分
		sb.setLength(5);
		System.out.println("改变长度后:"+sb);
		
	}

==============================================================================================

String,StringBuffer,StringBuilder运行时间对比:

	public static void main(String[] args) {

		Date date1 = new Date();
		long t1 = date1.getTime();
		StringBuffer buffer = new StringBuffer();
		for (int i = 0; i < 100000; i++) {
			buffer.append("java");
		}
		Date date2 = new Date();
		long t2 = date2.getTime();
		System.out.println("StringBuffer用时:" + (t2 - t1));

		Date date3 = new Date();
		t1 = date3.getTime();
		StringBuilder builder = new StringBuilder();
		for (int i = 0; i < 100000; i++) {
			builder.append("java");
		}
		Date date4 = new Date();
		t2 = date4.getTime();
		System.out.println("StringBuilder用时:" + (t2 - t1));

		Date datestr = new Date();
		t1 = datestr.getTime();
		String str = new String();
		for (int i = 0; i < 100000; i++) {
			str+="java";
		}
		Date datestr2 = new Date();
		t2 = datestr2.getTime();
		System.out.println("String用时:" + (t2 - t1));

	}

结果:

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页