JAVA知识点总结(六)String、StringBuffer、StringBuilder

来源:互联网 发布:caffe 利用fcn8s 分割 编辑:程序博客网 时间:2024/06/06 12:34

        在JAVASE中,有关String的用法比较多而且在面试中比较常见,今天总结一下String、StringBuffer及StringBuilder常见的用法及区别

1.s1和s2有什么去别

String s1="abc";//s1是一个类型变量,“abc”是一个对象

                         //字符串最大的特点,一旦被创建便不可被改变

String s2=new String("abc");

s1代表一个对象

s2代表两个对象

2、相关的几个术语

 :由JVM分配区域,用于保存线程执行的动作和数据引用。栈是一个运行的单位,Java中一个线程就会相应有一个线程栈与之对应。主要保存基本类型(或者叫内置类型)(char、byte、short、int、long、float、double、boolean)和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。

 :由JVM分配的,用于存储对象等数据的区域。用于存储对象。

 

常量池 :在堆中分配出来的一块存储区域,用于存储显式的String,float或者integer.例如String str="abc"; abc这个字符串是显式声明,所以存储在常量池。

 3.输出结果及常量池的应用

String s1="abc";

String s2=new String("abc");

String s3="abc";

system.out,println(s1==s2);//false

system.out.println(s1==s3);//true 因为存在常量池 s1中存入abc三个字符 因此内存中包含abc s3时不需再创建地址

因此是true

4.string类适用于描述字符串事物

那么它就提供了多个方法对字符串进行操作

常见的操作有:

(1)获取

1.1字符串中包含的字符数,也就是字符串的长度

int length();获取长度

1.2根据位置获取位置上某个字符

char charAt(int index);

1.3根据字符获取该字符在字符串中位置

int indexOf(int ch);返回的是ch在字符串中第一次出现的位置

int indexOf(int ch,int fromIndex):从fromIndex指定位置开始,获取ch在字符串中出现的位置

int indexOf(String str):返回的是ch在字符串中第一次出现的位置

 (2).判断

2.1 字符串中是否包含某一个字符串

 boolean contains(str);

特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1,表示该str不在字符串中存在,所以也可以用于对指定判断是否包含

if(str.indexof("aa")!=-1) 而且该方法既可以判断,又可以获取出现的位置

2.2 字符串中是否有内容

boolean isEmpty();//原理就是判断长度是否为0

2.3字符串是否是以指定内容开头

boolean startsWith(str);

2.4字符串是否是以指定内容结尾

boolean endswith(str)

2.5判断字符串的内容是否相同 复写了object类中的equals方法

boolean equals(str);

2.6 判断内容是否相同 并忽律大小写

boolean equalsIgnoreCase();

转换

3.1,将字符数组转成字符串

构造函数:String(char[  ])

                      String(char[  ],offset,count):将字符数组中的一部分转成字符串

 静态方法 static String copyValueof(char []);

                   static String copyValueOf(char[ ]data,int offset,int count)

static String valueOf(char[]);

3.2 将字符串转成字符数组

char[] toCharArray();

3.3将字节数组转成字符串

String(byte[])

String(byte[],offset,count);将字节数组中的一部分转成字符串。

3.4将字符串转成字节数组

byte[] getBytes();

3.5将基本数据类型转成字符串

 String valueOf(int/double)

特殊:字符串和字节数组再转换过程中是可以指定编码表的

4.替换

String replace(oldchar,newchar);

String s="hello java";

String s1=s.replace("java",""tanyun");

5、切割

String()split(regex);

String s="zhangsan,wangwu,lisi";

String[ ]arrs.split(",");//以逗号为边切开

for(int x=0;x<arr.length;x++)

{system.out.println(arr[x])};

6.子串,获取字符串中的一部分

String substring(begin);//从指定位置开始到结尾,如果角标不存在,会出现字符串角标越界异常

string substring(begin,end);//包含头不包含尾

7.转换,去除空格,比较

7.1将字符串转成大写或者小写

String toUpperCase();

String toLowerCase();

7.2将字符串两端的多个空格去除

String trim();

7.3对两个字符串进行自然顺序的比较 

int compareTo(string);

 String s="    Hello Java    ";

system.out.print(s.toUpercase);

system.out.print(s.toLowercase)

system.out.print(s.trim);

String s1 ="abc";

String s2="aaa";

system.out.print(s1.compareTo(s2)); //返回0则相等,大于0大于,小于0小于

StringBuffer//不能被继承

String与StringBuffer的区别

1.String创建的字符串一旦被创建便不可被改变

StringBuffer可以用于字符串的修改

StringBuffer是一个容器,是字符串缓冲区,而且是长度可以变化的,可以直接操作多个数据类型

最终会通过toString方法变成字符串,当数据类型不确定,个数不确定时使用StringBuffer

数组也是一个容器但是长度不可变化,一次只能操作一个类型

C create U update R read D delete

1.存储 

StringBuffer insert(index,数据 )

 StringBuffer append():将指定的数据作为参数添加到已有数据的结尾处

public static void main(String [] args){

StringBuffer sb=new StringBuffer();

StringBuffer sb1=sb.append(34);

//方法调用连 sb.append(34).append("abc").append(true);

system.out.print(sb.toString);

system.out.print(sb1.toSting);

}

2.删除

StringBuffer delete(int start,int end);删除缓冲区中的数据,包含strat,不包含end

StringBuffer deleteCharAt(index):删除指定位置的字符

public static void main(String [] args){

public static void method_del(){

StringBuffer sb=new StringBuffer("abcde");

sb.delete(1,3);

//清空缓冲区

sb=new StringBuffer();

sb.delete(0,sb.length);

sb.delete(2,3);//将C删除 

sb.deleteCharAt(2);

system.out.print(sb);

 }

}

3.获取

char charAt();

int indexOf();

int lastindexOf();

string int substring();

4.修改 

StringBuffer replace(start,end,string);

String setCharAt();

5.反转

StringBuffer reverse();

StringBuilder

JDK1.5版本之后出现了StringBuilder

不同之处为:

StringBuffer是线程同步

StringBuilder是线程不同步

偏向于用StringBuilder

因为线程同步会降低效率,并发执行会产生错乱,即使安全

单线程用StringBuilder 多线程用StringBuffer


0 0
原创粉丝点击