java基础——String,StringBuffer和StringBuilder

本文详细解析了Java中String、StringBuffer和StringBuilder的特性、构造函数、面向对象思想下的功能分类、转换、替换、切割、子串获取、比较、删除等核心功能。同时介绍了StringBuffer和StringBuilder的区别及适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String,StringBuffer和StringBuilder

一、String

public final class String

不能复写操作字符串的功能,因为是final修饰,无法拥有子类。

class StringDemo

{
    public static void main(String[] args)

    {

	//Stirng s = new String(); 不常用

	String s1="abc";//s1是一个类类型变量,"abc"是一个对象,使用双引号的都是对象

	//字符串最大特点,一旦被初始化就不可以被改变

	//s1="kk";//改变了s1指向的对象,"abc"对象的内容未改变

	String s2= new String("abc");

	System.out.println(s1==s2);//false 不是相同的对象

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

	//String类重写了Object类中的equals方法,该方法用于判断字符串内容是否相同

	//s1和s2有什么区别

	//s1在内存中有一个对象。s2在内存中有两个对象

    }

}

1.构造函数

String()空构造

String(char[] value)参数为字节数组

String(byte[] bytes)参数为字符数组


2.按照面向对象思想对字符串功能进行分类

1.获取

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

int length();获取长度//数组也有长度属性length,没有括号

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

char charAt(int index);//

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

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

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

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

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

>int lastindexOf(int ch)


2.判断

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

boolean contains(str);

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

if(str.indexOf("aa")!=-1)

而且该方法既可以判断,又可以获取出现的位置。

2.2 字符串中是否有内容

boolean isEmpty();原理就是判断长度是否为0。""是一个对象,null为空

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

boolean startsWith(str)

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

boolean endsWith(str)

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

boolean equals(str)

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

boolean equalsIgnoreCase()


3.转换

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[])

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

3.2 将字符串转成字符数组 **

char[] toCharArray();

3.3 将字节数组转成字符串

String(byte[])

String(byte[],offset,count)

3.4 将字符串转成字节数组

byte[] getBytess()

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

static String valueOf(int);

static String valueOf(double)

3+"";//String.valueOf(3);

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

4.替换

String replace(oldchar,newchar);

5.切割

String[] split(regex);

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

String substring(int begin);

String substring(int begin,int end);


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

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

String toUpperCase();

Stirng toLowerCase();

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

String trim();

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

int compareTo(string);


下面将各个功能演示一遍:

class StringMethodDemo

 {

   public static void method_7()

   {
 
       String s="     Hello Java    ";

       sop(s.toUpperCase());//变成大写

       sop(s.toLowerCase());//变成小写

       sop(s.trim());//去空格

       String s1= "a1c";

       String s2= "aaa";

       sop(s1.compareTo(s2));//按自然顺序比较,如果s1在s2的后面就返回一个大于0的数,相等就返回0.否则返回负数

   }

   public static void method_sub()

   {

       String s="abcdef";

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

       sop(s.substring(2,4));//包含头,不包含尾。s.substring(0,s.length())

   }

   public static void method_split()

   {

       String s="zhangsan,lisi,wangwu";

       String[] arr = s.split(",");//用逗号将字符串切割

       for(int i=0;i<arr.length(),i++){

       sop(arr[i]);

   }

   public static void method_replace()

   {

       String s="Hello java";

       //String s1=s.replace('a','n');//返回的是新的字符串 如果要替换的字符不存在,返回的还是原字符串

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

       sop("s="+s);

       sop("s1="+s1);

   }

   public static void method_trans()

   {

	 char[] arr={'a','b','c','d','e','f'};
 
	 String s = new String(arr,1,3);//将字符数组转换为字符串

	 sop("s="+s);

 

	 String s1="zxcvbnm";

	 char[] chs = s1.toCharArray();//字符串转换为字符数组

	 for(int i=0;i

	 sop("chs="+chs[i]);

      }

      public static void method_is()

      {

   	  String str="ArrayDemo.java";

     	//判断文件名称是否是Array单词开头

    	 sop(str.startsWith("Array"));

     	//判断文件名称是否是.java文件
	
    	 sop(str.endsWith("java"));

     	//判断文件是否包含Demo

    	 sop(str.contains("Demo"));

  	 }

      public static void method_get()

      {

    	 String str="abcdeakpf";

    	 //长度
 
     	 sop(str.length());

    	 //根据索引获取字符

 

     	sop(str.charAt(4));//当访问到字符串中不存在的角标时会发生StringIndexOfBoundsException

     	//根据字符获取索引

    	sop(str.indexOf('a',3));//如果没有找到返回-1
	
    	//sop(str.indexOf("ab",3))  

    	//反向索引一个字符出现的位置

     	sop(str.lastIndexOf("a"));//返回的是角标

   }

   public static void sop(Object obj)

   {

    	 System.out.println(obj);

   }

   public static void main(String[] args)

   {

    	method_7();

    	//method_sub();

     	//method_split();

 	//method_replace();

 	//method_trans();

     	//method_is();

    	//method_get();
	
    	String s1="abc";

    	String s2=new String("abc");

        String s3="abc";//已经存在的字符串存储在常量池中,另一个变量查找到相同字符串,就不会另外开辟空间了,指向同一个对象,节约内存

     

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

   	System.out.println(s1==s3);

     

   }

 }


二、StringBuffer

public final class StringBuffer

final修饰,没有子类。

StringBuffer是字符串缓冲区,是一个容器。

它有以下特点:

1.而且长度是可变化的。

2.可以字节操作多个数据类型。

3.最终会通过toString方法变成字符串


主要功能:

1.存储

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

StringBuffr insert(index,数据):可以将数据插入指定index位置

2.删除

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

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

3.获取

char charAt(int index)

indexOf(String str)

int lastIndexOf(String str)

int length()

String substring(int start,int end)//注意返回值类型不是容器是String

4.修改

StringBuffer replace(start,end,String);

void setCharAt(int index,char ch);//注意返回值类型是void

5.反转

StirngBuffer reverse();

6.将缓冲区中的指定数据存储到指定字符数组中

void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin)


具体用法看下面的例子:

class StringBufferDemo

{

    public static void main(String[] args)

    {
	//method_delete();
 	//method_update();
	method_add();
    }

    public static void method_update()

    {

	StringBuffer sb=new StringBuffer("abcde");
	//sb.replace(1,4,"java");//替换
	sb.setCharAt(2,'k');
	sop(sb.toString());//变成字符串

    }

    public static void method_delete()

    {

	StringBuffer sb=new StringBuffer("abcde");
	//sb.delete(1,3);//删除

 

	//sb.delete(0,sb.length()); //清空缓冲区
	//sb=new StringBuffer();

	//sb.delete(2,3);
	sb.deleteCharAt(2);//删除指定位置

	sop(sb.toString());

    }

    public static void method_add()

    {

	StringBuffer sb=new StringBuffer();

	sb.append("abc").append(true).append(34);//方法调用链 操作的同一对象

	sb.insert(1,"qq");//在指定位置上插入

	// StringBuffer sb1=sb.append(34);

	// sop("(sb==sb1):"+(sb==sb1));

	sop(sb.toString());//abctrue34
        // sop(sb1.toString());

    }

    public static void sop(String str)

    {

        System.out.println(str);

    }

}

三、StringBuilder

public final class StringBuilder

因为是final修饰,同样也没有子类。

StringBuilder也是字符串缓冲区,是一种容器。它是JDK1.5版本之后出现的,它和StringBuffer的区别:

StringBuffer是线程同步的,比较安全。如果单线程程序,需要判断锁,效率低。

StringBuilder是线程不同步的。。如果是单线程程序,效率高;如需用再多线程,自己加锁进行同步。

StringBuilder和StringBuffer的用法类似,这里就不详细叙述了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值