1.String的特点和3+1中创造方式
java.lang.String类代表字符串
API当中说:Java程序中的所有字符串字面值(如"abc")都作为此类的实例实现。
也就是说,程序当中所有的双引号字符串都是String类的对象。(就算没有new,也照样是)
字符串的特点:
1.字符串的内容永不可变【重点】
2.正是因为字符串的内容不可变,所以所有字符串是可以共享的
3.字符串效果上相当于char[]字符数组,但是底层原理是byte[]字节数组
创建字符串的3+1中方式
三种构造方法:
- public String(); 创建一个空白字符串,不含任何内容
- public String(char[] array); 根据字符数组的内容,来创建对应的字符串
- public String(byte[] array); 根据字节数组的内容,来创建对应的字符串
一种直接创造
String str =“Hello”; //右边直接用双引号
注意:直接写上双引号,就是字符串对象
public class February1{
public static void main(String[] args) {
//使用空参数构造方法
String str1=new String();//小括号留空,说明什么内容都没有
System.out.println("第一个字符串为:"+str1);
//根据字符数组来创建字符串
char[] charArray= {'A','B','C'};
String str2=new String(charArray);
System.out.println("第二个字符串为:"+str2);
//根据字节数组来创建字符串
byte[] byteArray= {97,98,99};
String str3=new String(byteArray);
System.out.println("第三个字符串为:"+str3);
}
}
2.字符串常量池
- 字符串常量池:程序当中直接写上的双引号字符串,才在字符串常量池当中
- 对于基本类型来说,==是进行数值的比较
- 对于引用类型来说,==是进行地址值的比较
public class February2 {
public static void main(String[] args) {
String str1="abc";
String str2="abc";
char[] charArray= {'a','b','c'};
String str3=new String(charArray);
System.out.println(str1==str2); //true
System.out.println(str1==str3); //false
System.out.println(str2==str3); //false
}
}
3.比较字符串的相关方法
- ==是进行地址值的比较,如果需要进行字符串内容的比较,可以使用两个方法
- 方法. public boolean equals(Object obj);参数是任何对象,只有内容相同才会给true
- 注意事项:
- 1.任何对象都能用Object进行接收
- 2.equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样
- 3.如果比较双方,一个是常量,一个是变量,建议把常量放在前面
- 建议:“abc”.equals(str); 不建议:str.equals(“abc”);
- 方法2. public boolean equalsIgnoreCase(String obj);
-
和方法1一样,只是比较时,忽略字母的大小写
public static void main(String[] args) {
String str1="abc";
String str2="abc";
char [] arraychar= {'a','b','c'};
String str3=new String(arraychar);
//比较str1和str2
System.out.println(str1.equals(str2)); //true
//比较str1和str3
System.out.println(str1.equals(str3)); //true
//比较str2和str3
System.out.println(str2.equals(str3)); //true
String str4="QWR";
//比较str1和str4
System.out.println(str1.equals(str4)); //false
String str5="AbC";
//使用equalsIgnoreCase方法比较str1和str5
System.out.println(str1.equalsIgnoreCase(str5)); //true
}
}
4.字符串的获取的相关方法
* public int length();获取字符串的字符个数
* public String concat(String str); 将字符串和参数字符串连接成一个新的字符串;
* public charAt(int index); 获取索引位置的单个字符(索引从0开始)
* public int indexOf(String str); 查找参数字符串在本字符串当中首次出现的索引位置,如果没有,返回-1
public static void main(String[] args) {
//获取字符串的长度
int length="lskfdlaksfajg".length();
System.out.println(length);
//连接字符串
String str1="Hello ";
String str2="Java";
String str3=str1.concat(str2);
System.out.println(str3); //Hello Java
//获取指定索引位置的单个字符
char ch=str1.charAt(1);// 获取字符串str1的索引位置为1的单个字符
System.out.println("索引位置为1的字符是:"+ch); //e
//查找参数字符串在本字符串中首次出现的索引位置
String original="Hello world";
int A=original.indexOf("llo");
System.out.println("第一次出现llo的索引位置是:"+A);
}
}
5.字符串的截取方法
* public String substring(int index); 截取从参数位置开始,一直到字符串结尾,返回新的字符串
* public String substring(int began,int end); 截取从began位置开始,一直到end位置的字符串。
* 注意:[began,end) began位置的字符要取,end位置的字符不用取
public static void main(String [] args) {
String str1="Hello ZhuMinghua";
//用substring方法进行截取
String str2=str1.substring(6);
System.out.println("截取得到的字符串为:"+str2); //ZhuMinghua
//用substring(int began,int end)方法进行截取
String str3="abcdefghijklmnopqrstuvwxyz";
String str4=str3.substring(0,9);
System.out.println("截取得到的字符串为:"+str4);//abcdefghi
}
}
6.String当中与转换相关的常用方法有:
* public char[] toCharArray();将当前字符串转换成为字符数组作为返回值
* public byte[] getBytes();获取当前字符串底层的字节数组
* public string replace(CharSequence oldString, CharSequence newString);(指定要替换的内容)
* 将出现的老字符串替换成为新的字符串,返回替换之后的新字符串
public static void main(String[] args) {
//将当前字符串转换成为字符数组作为返回值
String str1="abcdef";
char[] ch=str1.toCharArray();
System.out.println("第1号元素为"+ch[1]);
int x=ch.length;
System.out.println("字符数组ch的长度是:"+x);
System.out.println("字符数组ch的内容为:");
for(int i=0;i<ch.length;i++)
{
System.out.println(ch[i]);
}
//获取当前字符串底层的字节数组
String str2="AAaa";
byte[] by=str2.getBytes();
int s=by.length;
System.out.println("字节数组by的长度为:"+s);
System.out.println("字节数组的内容为:");
for(int i=0;i<by.length;i++)
{
System.out.println(by[i]);
}
//将老字符串替换成新字符串,返回新的字符串
String str3="你好,兄弟。";
String str4=str3.replace("兄弟","朋友");
System.out.println(str4); //你好,朋友。
//例如打游戏时,骂脏话,系统会把脏话替换为**输出;
String str5="你会不会玩,你大爷的!你大爷的!!你大爷的!!!";
String str6=str5.replace("你大爷的","****");
System.out.println(str6); // 你会不会玩,****!****!!****!!!
}
}
7.分割字符的方法
* public String[] split(String regex);按照参数的规则,将字符串分割成为若干份
* split方法的参数是“正则表达式”
* 因此,用英文句号“.”进行分割,必须写成"\\.",否则会分割失败
public static void main(String[] args) {
String str1="aaa,BBB,yyy";
//用逗号“,”,将字符串str1分割
String[] str2=str1.split(",");
//遍历str2字符数组
for(int i=0;i<str2.length;i++)
{
System.out.println(str2[i]);
}
String str3="HHH.hhh,www";
//用英文“.”,将字符串str3分割
String [] str4=str3.split(".");
//遍历str4字符数组
for(int i=0;i<str4.length;i++)
{
System.out.println(str4[i]);
}//结果为空
//测量str4字符数组的长度
int a=str4.length;
System.out.println(a);//输出结果为:0
}
}