Java基础进阶之lang包下的String类学习

进入这一学习阶段,我们就必须开始利用API文档了,它可以帮助我们更高效的去学习关于lang包下的各种类,类下的各种常用方法,如何正确的使用API文档,百度自行学习
在这里插入图片描述
这是api1.6截的图,我们可以很明显的发现String 类是属于Object的子类,实现了三个不同的接口,而且被final修饰,那么就预示着它不可以被修改
说明了Sting类从何而来并且实现了哪些接口之外,那么接下来我们就理解一下什么是String

char与String 对比

我们经常会看到这样的代码

char c='C';   Sting c="ccc";

很明显我们会发现两个都是修饰字符的,不同的是String修饰的是一组字符串,char则修饰的是单个字符,而且String是用双引号来标记字符串的,char则是用单引号标记单个字符,我们也可以理解成由String定义的字符串是由一个char类型的字符数组组成例如下面代码

char data[]={'a','b','c'];
String data="abc";

通过以上说明我们可以总结一下String主要有两个特点

  1. 可以将String定义的数据理解为一个字符数组,因此可以存储单个字符或者多个字符
  2. 字符串属于一个常量,因此创建以后就不能修改,所以对象不可变,可以实现数据共享
    接下来我们就了解一下String类中常用的方法以代码的形式示例,并且进行方法解析
class StringTest{
	public void main(String[] args){
	String xx="abc";
	String yy="abcd";
	String zz="AbC";
	String str="abc,efg,igf";
   }
}

char charAt(int index) 根据下标返回该字符串

System.out.println(xx.charAt(1));  
输出结果是:b

int compareTo(String anotherString) 根据字典排列顺序进行大小比较,如果前一个字符串比后一个字符串大则返回大于一个0的值,若是比后者小则返回一个比0小的值,若是相等则返回0

System.out.println(xx.compareTo(yy));
输出结果是:-1

boolean eauqalsIgnoreCase(String anotherString) 两个字符串值进行比较忽略大小写,该方法一般用于验证码验证

System.out.println(xx.equalsIgnoreCase(zz));
输出结果是:true

String concat(String str) 将指定的字符串连接在此字符串的后面

System.out.println(xx.concat(zz));
输出结果:abcAbC

boolean contains(CharSequence s) 当且仅当此字符串包含指定的char字符或者字符串时候返回ture

System.out.println(xx.contains("a"));
输出结果:true

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

boolean startsWith(String prefix,int index)判断此字符是否以指定下标的字符作为前缀开始
boolean endsWith(String prefix)则判读结尾是否以指定字符串作为结尾
这两个方法一般用于用户名注册验证

System.out.println(xx.startsWith("a"));
System.out.println(xx.startsWith("a",0));
返回结果是:true
                    true

int indexOf(“c”); 找出指定字符串第一次出现的下标

System.out.println(xx.indexOf("b"));
输出结果:1

int indexOf(int ch,int fromIndex) 从指定的字符开始检索,输出要检索字符第一次出现的位置 若是没有找到则返回-1 而且要检索字符的位置是它在整个字符串中的下标

System.out.println(xx.indexOf("c",1));
返回结果是:2

**String[] split(String regex)**根据给定正则表达式来拆分此字符串 拆分完之后是一个字符数组 想要输出就必须进行遍历

String[] arr=str.split(",");
		for (String string : arr) {
			System.out.println(string);
		}
输出解雇:abc
		 efg
		 igf

String substring(int beginIndex)根据指定下标截取新的字符串 也就是原字符串的字串

System.out.println(xx.substring(1));
		System.out.println(xx);
		结果:abc
		    bc
		    我们会发现xx字符串虽然被截取但是它的原串依然存在不会被更改

StringBuffer

在这里插入图片描述通过API我们会发现StringBuffer类和String类特别相似,都是Object的子类且被final修饰不可以有子类,那我就简单梳理一下它两的相同点和不同点
相同点

  1. 都是对字符串的操作

不同点

  1. String内容不可改变一旦对String操作就开辟了新的内存空间
  2. StringBuffer内容可以改变,所有的操作都是在子集的缓冲区中完成,不会重新开辟新的内存空间(每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大)
  3. 如果要判断两个StringBuffer是否相等,就必须先将StringBuffer转换成String进行比较

StringBuffer的主要方法主要有一下几个

1.StringBuffer append(String str) 将指定的字符串追加到此字符序列。

2 StringBuffer delete(int start, int end) 移除此序列的子字符串中的字符。

3 StringBuffer deleteCharAt(int index) 移除此序列指定位置的 char。

4 StringBuffer insert(int offset, String str) 将字符串插入此字符序列中。

5 void setCharAt(int index, char ch) 将给定索引处的字符设置为 ch。

6 StringBuffer reverse() 将此字符序列用其反转形式取代

public class StringBufferA {
	public static void main(String[] args) {
		String s1="123";
		StringBuffer s3=new StringBuffer(s1);
		StringBuffer s4=s3.append(false);
		System.out.println("s4: "+s4); 
		System.out.println("s3: "+s3)
		}
输出结果是:123false
                     123false

我们会发现StringBuffer类执行自己的方法时候原有的字符串会发生改变,这是因为执行这些操作都是在缓冲区执行的,因此字符串会随之改变(个人自己理解,很是浅薄,若想更清楚理解String和StringBuffer就必须理解它两在执行方法时候的内存变化,搞清楚堆内存,缓冲区,栈内存三者之间的关系 推荐一篇博客https://www.cnblogs.com/javadevelper/p/6067655.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值