字符串操作
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类其他方法: