javaString类常用方法及其原理分析

字符串操作
1、String可以表示一个字符串。
2、String类实际是使用字符数组存储的

String类的两者赋值方式:
1)、一种称为直接赋值:

String name = "小白";

2)、通过关键字new调用String的构造方法赋值

String name = new String("小白");

String类的两种赋值分析:
1、字符串常量池:堆中有一块区域叫字符串常量池
2、String name = new String(“小白”),在内存中的分析:先在常量池中找,如果常量池没有则会创建一个对象,无论常量池有没有都会在堆中再申请内存空间
3、String name = “小白”,在内存中的分析:先在常量池找,如果没有则会在常量池中创建,如果有则直接取出
示例代码:

public class StringDemo {
	public static void main(String[] args) {
		//String的两种赋值方式,java推荐使用第一种方式
		
		//1直接赋值
		String s1 = "飞飞";
		//2使用new关键字创建对象,new表示申请内存空间
		//以下代码创建了几个对象,2个,常量池和堆中对象
		String s2 = new String("飞飞");
		//以下代码创建了几个对象,4个
		String s5 ="菲菲" + new String("飞飞");
		
		String s3 = "飞飞";
		System.out.println(s1==s2);
		System.out.println(s1==s3);
		}
}

String类编译期与运行期分析:
1、编译期和运行期
2、代码示例:4种情况分析

public class StringDemo1 {
	public static void main(String[] args) {
//代码示例:4种情况分析:直接赋值字符串连接时,考虑编译期和运行期
		//如果在编译期可以被确定,那么就使用已有的对象,否则会创建新的对象
		//变量无法在编译期确定
		String a = "a";
		String a1 = a+1;
		String a2 = "a1";
		System.out.println(a1==a2);//false
		
		//常量可以在编译期确定
		final String b = "b";
		String b1 = b+1;
		String b2 = "b1";
		System.out.println(b1==b2);//true
		
		//方法无法在编译期确定
		String c = getC();
		String c1 = c+1;
		String c2 = "c1";
		System.out.println(c1==c2);//false
		
		//最终方法无法在编译期确定
		final String d = getD();
		String d1 = c+1;
		String d2 = "c1";
		System.out.println(d1==d2);//false
	}
	private static String getC(){
		return "c";
	}
	private static String getD(){
		return "d";
	}
	
}

字符串操作
String类字符与字符串操作方法:
public char charAt(int index),普通,根据下标找到指定的字符
public char[] toCharArray(),普通,以字符数组的形式返回全部的字符串内容
public String(chai[] value),构造,将全部的字符数组变为字符串
public String(char[] value,int offset,int count),构造,将指定范围的字符数组变为字符串

		//public char charAt(int index)
		String str = "cj83j8ew488tr29e92jfrwer2";
		char c =str.charAt(4);
		System.out.println(c);
		
		//public char[] toCharArray()
		System.out.println(str.toCharArray());
		
		//public String(chai[] value)
		char[] cs = {'w','r','t','y'};
		String s1 = new String(cs);
		System.out.println(s1);
		
		//public String(char[] value,int offset,int count)
		String s2 = new String(cs,0,3);
		System.out.println(s2);
		/**
		运行结果:
		j
		cj83j8ew488tr29e92jfrwer2
		wrty
		wrt
		*/

String类字符与字符串操作方法:
public byte[] getBytes(),普通,将字符串变为字节数组
public String(byte[] bytes),构造,将字节数组变为字符串
public String(byte[] bytes,int offset,int length),构造,将指定范围的字节数组变为字符串
public String (byte[] bytes,String charsetName),构造,通过使用指定的charset解码指定的byte数组,构造一个新的String

String str = "cj83j8ew488tr29e92jfrwer2";
		
		//public byte[] getBytes()
		System.out.println(Arrays.toString(str.getBytes()));
		
		byte[] by1 = str.getBytes();
		//public String(byte[] bytes)
		String str1 = new String(by1);;
		System.out.println(Arrays.toString(str1.getBytes()));
		
		//public String(byte[] bytes,int offset,int length)
		String str2 = new String(by1,0,4);
		System.out.println(Arrays.toString(str2.getBytes()));
	/**
	运行结果:
	[99, 106, 56, 51, 106, 56, 101, 119, 52, 56, 56, 116, 114, 50, 57, 101, 57, 50, 106, 102, 114, 119, 101, 114, 50]
	[99, 106, 56, 51, 106, 56, 101, 119, 52, 56, 56, 116, 114, 50, 57, 101, 57, 50, 106, 102, 114, 119, 101, 114, 50]
	[99, 106, 56, 51]
	*/

String类判断是否以指定内容开头或结尾:
public boolean startswith(String prefix),普通,从第一个位置开始判断是否以指定的内容开头
public boolean startswith(String prefix,int toffset),普通,从指定位置开始判断是否以指定的内容开头
public boolean endsWith(String suffix),普通,判断是否以指定的内容结尾

String类替换操作:
public String replace(char oldChar,char newChar),普通,替换指定字符
public String replace(CharSequence target ,CharSequence replacement),普通,替换指定字符串
public String replaceAll(String regex,String replacement),普通,替换指定字符串
public String replaceFirst(String regex,String replacement),普通,替换第一个满足条件的字符串

String类字符串截取操作:
public String substring(int beginIndex),普通,从指定位置开始一直截取到尾末
public String substring(int beginIndex, int endIndex),普通,截取指定范围的字符串

String类字符串拆分操作:
public String[] split(String regex),普通,按照指定的字符串拆分
public String[] split(String regex,int limit),普通,拆分字符串,并指定拆分的个数

String类字符串查找操作:
在这里插入图片描述
String类其他方法:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值