String类
String类代表字符串
java程序中的所有字符串面值“如abc”都作为此类的 实例实现
程序中所有的双引号字符串,都是string类的对象(就算没有new 也照样是)
字符串的特点:
1. 字符串的内容永不可变
2. 正是因为字符串不可改变,所以字符串是可以共享使用的
3. 字符串效果上相当于是char字符数组,但是底层原理是byte字节数组。
创建字符串的常见3+1种方法:
三种构造方法
public String();创建一个空白字符串,不含有任何内容
String str = new String();
public String(char[ ] array):根据字符数组的内容,创建对应的字符串
char[] charArray = {'A','B','C'};
String str = new String(charArray);
System.out.println(str);//ABC
public String(byte[ ] array):根据字节数组的内容,创建对应的字符串
byte[] byteArray = {97,98,99};
String str = new String(byteArray);
System.out.println(str);//abc 97 98 99代表的字母字符串底层原理是字节数组
一种直接创建
直接写上双引号,就是字符串对象。
String str = "HelloWord"
字符串常量池
程序中直接写上的双引号字符串,就在字符串常量池中,new的不在常量池中。
对于基本类型来说,== 是数值的比较
对于引用类型来说,==是地址值的比较。
String str1 = "abc";//在字符串常量池中
String str2 = "abc";//在字符串常量池中
char[] charArray = {'a','b','c'};
String str3 = new String(charArray);//不在字符串常量池中
System.out.println(str1 == str2);//ture
System.out.println(str1 == str3);//false
System.out.println(str2 == str3);//false
字符串比较的相关方法
== 比较的是地址值
equals 比较字符串的内容,参数可以是任何对象 ,只有参数是一个字符串并且内容相同才会给true
a.equals(b)
String str1 = "hello";
String str2 = "hello";
char[] charArray = {'h','e','l','l','o'};
String str3 = new String(charArray);
System.out.println(str1.equals(str2));//ture
System.out.println(str1.equals(str3));//ture
System.out.println("hello".equals(str1));//ture
如果比较双方一个常量一个变量,推荐吧常量符号写到前面。
equalsIgnoreCase方法比较的时候不区分大小写
straA.equalsIgnoreCase(straB)
String strA = "java";
String strB = "Java";
System.out.println(strA.equals(strB));//false 区分大小写
System.out.println(strA.equalsIgnoreCase(strB));//false 忽略大小写
与获取相关的方法
public int length();获取字符串中含有的字符个数,拿到字符长度
public String concat (String str); 将当前字符串和参数字符串拼接成为新的字符串
public char chatAt(int index) 获取自定索引位置的单个字符
public int indexOf (String str) 查找参数字符串在本来字符串当中出现的第一次索引位置
//获取字符串长度
String length = "abcd".length();
System.out.println(length);//4
//拼接字符串
String str1 = "hello"
String str2 = "word"
String str3 = str1.concat(str2);
System.out.println(str3);//helloword
//获取指定索引位置的单个字符
char ch = "hello".charAt(1);
Syatem.out.println(ch) ;// e 在一号索引位置的字符
//查找参数字符串在本来字符串当中出现的第一次索引位置,如果根本没有,返回-1
String original = "helloword";
int index = original.indexOf(l);
System.out.println(index)//2
字符串的截取方法
public String substring (int index) 截取从参数位置一直到字符串末尾
public String substring(int begin , int end) 截取begin开始从end结束的中间的字符串
截取的时候 左闭右开 包含左边不包含右边 变得只是地址值(创建了一个新的字符串) 字符串的内容不可改变
String str1 = "helloword";
String str2 = str1.substring(5);
String str3 = str1.substring(3,5);
System.out.println(str1);//helloword
System.out.println(str2);//word
System.out.println(str3);//ll
字符串转换相关方法
public char [ ]toCharArray( ) 将当前字符串拆分为字符数组
public char [ ]getBytes( ),获得当前字符串的字节数组
public String replace(CharSequence lidString,CharSequence newString)将所有出现的老字符串替换为新的字符串
//把当前字符串转换为字符数组
char[] chars = "Hello".toCharArray();
//把当前字符串转换为字节数组
byte[] bytes = "abc".getBytes();
//字符串的内容替换
String str1 = "How do you do";
String str2 = str1.replace(o,*)//把字符串中所有的o替换为*
System.ou.println(str1);//How do you do
System.ou.println(str2);//H*w d* you d*
分割字符串的相关方法
public String[ ] split (String regex)按照参数规则,将字符串切为若干部分
如果按照英文句点切割 必须写 \.
String str1 = "aaa,bbb,ccc";
String[] array1 = str1.split(,);//把字符串str1按照“,”分隔开,如果按照“.”分割,需要把 . 写成 \\.