java中的String,Stringbuilder,Stringbuff。

本文详细介绍了Java中的字符串String类,探讨了String对象的创建方式、特性及各种操作方法,同时对比了String与StringBuilder类的不同之处。

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

Java字符串String

从表面上看,字符串就是双引号之间的数据,例如"Hello World",在Java中,字符串其实就是一个String类的对象,可以这样来定义一个字符串:

String str1="Hello World";//第一种方法
String str2=new String("Hello World");//第二种方法

这两种都可以创建字符串。

字符串可以通过“+”来连接,基本数据类型与字符串进行“+”操作一般也会自动转换为字符串,比如:

int a=10;
String str1="Hello"+a;//此时str就变成了Hello10
String str2="Hello"+"World";//此时str2就编程了HelloWorld

String字符串与数组有一个相同点,就是它们被初始化之后,长度是不变的,并且字符串内容也不变。如果要改变它的长度或者值,就会产生一个新的字符串,如下所示:

String str = "Hello ";//此时str被初始化为“Hello”
str += "World!";//此时str已经变成了“HelloWorld”

这个赋值有点像简单的接龙,在str后直接加了个“World”字符串,形成新的字符串“HelloWorld”。其运行原理是这样的:JVM首先在内存中存放了“Hello”字符串,并把str引用指向了“Hello”字符串的内存存放地址。此时要追加新的字符串是不可能的,因为字符串被初始化后,长度是固定的,无法改变,只有放弃原来的空间,然后JVM在内存中存放了“HelloWorld”字符串,并把str引用指向到"HelloWorld"字符串的内存存放地址,但其实在内存空间中,"Hello"这个字符串还存在,只是str不指向它了,而指向了"HelloWorld"这个新的字符串。

实际上,String类是java.lang包下的一个类,因为String特别常用,所以Java提供了一个简化的语法:

String str1="Hello";//简化语法
String str2=new String("Hello");标准语法

使用简化语法的另一个原因是,按照标准的面向对象语法,在内存使用上存在比较大的浪费,例如String str=new String(“Hello”);实际上创建了两个String对象,一个是str引用,一个是“Hello”对象。String类在内存中的存放地址

String类的一些了解
翻看String类的源码得知,String类是一个不可继承的类,具有final关键字修饰。
String类继承自Java中所有类的父类Object,并重写了Object中的equals(比较)方法。
String类还有format方法,可以对字符串进行格式化输出。
String类还有直接对字符串直接的正则方法:matches方法。
字符串(String)的一些方法
翻看Java文档,可以看出String类为我们封装了很多的对字符串操作的方法:

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

char charAt(int index)
根据下标获取字符串的某个字符(可以获取某个特定位置的字符)

String concat(String str)

 将指定字符串连接到此字符串的结尾(相当于“+”运算符)

boolean contains(CharSequence s)
判断此char值序列s是否在字符串中,存在返回true(可以判断此字符串是否存在某个子串)

boolean endWith(String suffix)
判断此字符串是否以指定的后缀结束(比如在上传图片时,判断上传文件的文件扩展名是否为.jpg)

boolean startWith(String perfix)
判断此字符串是否以指定的前缀开始

booean equals(Object anObject)
将此字符串与指定的字符串进行比较(这个方法是重写了String的父类Object的方法,用来判断两个字符串的值是否相同)

boolean equalsIgnoreCase(String anotherString)
将此字符串和另一个字符串进行比较,不考虑大小写

String format(String format,Object… args)
对字符串进行格式化吃书输出

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

String intern()
返回字符串对象的规范化表示形式

boolean isEmpty()
当且仅当length()为0时返回true

int lastIndexOf(String str)
返回指定字符串在此字符串中最后一次出现的索引

boolean matches(String regex)
判断此字符串是否匹配给定的正则表达式

String replace(CharSequence target,CharSequence replacement)
替换字符串

String[] split(String regex)
根据给定的正则表达式来拆分此字符串
eg

 String[] date = sc.next().split("/"); //将输入的02/03/04 转化为 02 03 04

String substring(int beginIndex,int endIndex)
字符串截取,从beginIndex索引截取到endIndex-1处,

char[] toCharArray()
把此字符串转换成一个新的char数组

String toLowerCase()
把此字符串中的所有字符都转换为小写

String toUpperCase()
把此字符串中的所有字符都转换为大写

String toString()
用字符串的形式来返回此对象本身(它已经是一个字符串)

String n3=Integer.toString(n, d)可以返回对应的d进制

String valueOf(int i)
返回int参数的字符串形式(也就是所谓的类型转换,相应的还有其他基础数据类型的,比如boolean,double,long,char)

string 创建二维数组:
String m[] = new String[60];

char s=scanner.next().charAt(0);//输入单字符
scanner.nextLine();//接收输入流缓冲
String an=scanner.nextLine();//输入一行数据包括空格

Java字符串StringBuilder

StringBuilder:是一个可变的字符串。字符串缓冲区类。
*

  • String和StringBuilder的区别:
  • String的内容是固定的。
  • StringBuilder的内容是可变的。
  • 构造方法:
  • StringBuilder()
    StringBuilder ss=new StringBuilder(s.next());
		String t="appel";
		t+='a';t+="a";
		System.out.println(t);
		
		StringBuilder ss=new StringBuilder(s.next());
		StringBuilder s=new StringBuilder("asdfe");
		s.append("asdfe");
		s.insert(0,"apple");//String中没有的方法
		s.reverse();//String中没有的方法
		System.out.println(s);
  • 成员方法:
  • int capacity():返回当前容量
  • int length():返回长度(字符数)
  • 添加功能
  • StringBuilder append(任意类型):添加数据,并返回自身对象
  • 反转功能
  • StringBuilder reverse()
  • 转换功能
  • toString() :StringBuilder转换成String
  • 插入功能
  • insert(int offset, Object obj) :将“超类”插入到指定位置。

三者区别:

一,String的值是不可变的

这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间
比如:
string字符串“hello”后面加上新的字符串“world”,这个过程是需要重新在栈堆内存中开辟内存空间的,最终得到了“hello world”字符串也相应的需要开辟内存空间,这样短短的两个字符串,却需要开辟三次内存空间。为了应对经常性的字符串相关的操作,就需要使用Java提供的其他两个操作字符串的类——StringBuffer类和StringBuild类来对此种变化字符串进行处理。

二,StringBuffer 和 StringBuilder 类——StringBuffer、StringBuilder字符串变量

当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。

和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值