String类在java.lang包下,所以使用的时候不需要导包 String类代表字符串,java程序中的所有字符串文字(例如"abc")都被实现为此类的实例。也就是说,java程序中所有的双引号字符串,都是string类的对象
字符串的特点 1、字符串不可变,它们的值在创建后不能被更改 2、虽然String的值不可变的,但是它们可以被共享 3、字符串效果上相当于字符串组(char[]),但是底层原理是字节数组(bytell)
String类的常用方法
方法名 | 说明 |
---|---|
public boolean equals(Object anObject) | 比较字符串的内容,严格区分大小写 |
public char charAt(int index) | 返回指定索引处的char值 |
public int length() | 返回此字符串的长度 |
String类的构造方法
方法名 | 说明 |
---|---|
public String() | 使用无参构造方法创建一个空白字符串对象,不含有任何内容 |
public String(char[] chs) | 根据字符数组的内容,来创建字符串对象 |
public String(byte[] bys) | 根据字节数组的内容,来创建字符串对象 |
String s = "abc" | 没有使用构造方法,直接赋值的方式创建字符串对象,内容就是abc |
x
package ch3;
public class a2_2String构造方法 {
public static void main(String[] args) {
//使用无参构造方法创建一个空白字符串对象
String s1 = new String();
System.out.println("s1:" + s1); //还没有赋值,输出空白,因为该对象里面没有内容
//根据字符数组的内容,来创建字符串对象
char[] chs = {'a','b','c'};//首先创建一个字符数组
String s2 = new String(chs);//参数是字符数组,刚好chs就是一个字符数组
System.out.println("s2:" + s2);
//根据字节数组的内容,来创建字符串对象
byte[] bys = {97,98,99,100,101,102};//首先创建一个字节数组,注意对应的是ASCII码值
String s3 = new String(bys);//把字节数组bys作为参数传过来
System.out.println("s3:" + s3);
//没有使用构造方法,直接赋值的方式创建字符串对象
String s4 = "abc123";
System.out.println("s4:" + s4);
}
//注意:推荐使用直接赋值的方式得到字符串对象
}
String对象的特点
通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内存相同,但是地址值不同
xxxxxxxxxx
char[] chs = {'a','b','c'};
String s1 = new String(chs);
String s2 = new String(chs);
上面的代码中,JVM即java虚拟机会首先创建一个字符数组,然后每一次new的时候都会有一个新的地址,只不过s1和s2参考的字符串内容是相同的
字符串的比较
使用==做比较 1、基本类型:比较的是数据值是否相同 2、引用类型:比较的是地址值是否相同
字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫做:equals() 1、public boolean equals(Object anObject):将此字符串与指定对象进行比较,由于我们比较的是字符串对象,所以参数直接传递一个字符串
xxxxxxxxxx
package ch3;
public class a2_4字符串的比较 {
public static void main(String[] args) {
//使用构造方法的方式得到对象
char[] chs = {'a','b','c'};
String s1 = new String(chs);
String s2 = new String(chs);
//使用直接赋值的方式得到对象
String s3 = "abc";
String s4 = "abc";
//比较字符串对象地址值是否相同
System.out.println(s1 == s2); //不相同
System.out.println(s1 == s3); //不相同
System.out.println(s3 == s4); //相同
System.out.println("-------");
//比较字符串内容是否相同
System.out.println(s1.equals(s2)); //相同,比的是内容,而不是地址值
System.out.println(s1.equals(s3)); //相同
System.out.println(s3.equals(s4)); //相同
}
}
遍历字符串
x
package ch3;
import java.util.Scanner;
public class a2_6遍历字符串 {
public static void main(String[] args) {
//键盘录入一个字符串,用Scanner实现
Scanner sc = new Scanner(System.in);
System.out.println("please input a String:");
String line = sc.nextLine();
/*遍历字符串,首先要能够获取到字符串中的每一个字符
System.out.println(line.charAt(0)); //遍历字符串,0是指索引从0开始
System.out.println(line.charAt(1));
System.out.println(line.charAt(2));
上面的三个输出可以用循环优化一下,如下*/
/*for(int i=0; i<3; i++){ //只能遍历字符串的前三个
System.out.println(line.charAt(i));
}
上面的for循环还是不够简洁,可以使用方法继续优化,如下*/
for(int i=0; i<line.length(); i++){
System.out.println(line.charAt(i));
}
}
}
统计字符串次数
xxxxxxxxxx
package ch3;
import java.util.Scanner;
public class a2_7统计字符次数 {
//需求:键盘输入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数
public static void main(String[] args) {
//键盘录入一个字符串,用Scanner实现
Scanner sc = new Scanner((System.in));
System.out.println("please input a String:");
String line = sc.nextLine();
//统计三种类型的字符个数,需定义三个统计变量,初始值都为0
int bigCount = 0;
int smallCount = 0;
int numberCount = 0;
//遍历字符串得到每一字符
for(int i=0; i<line.length(); i++){
char ch = line.charAt(i);
//判断该字符属于那种类型,然后对应类型的统计数量+1
if(ch>='A' && ch<='Z'){ //&&并运算符
bigCount++;
} else if(ch>='a' &&ch<='z'){
smallCount++;
} else if(ch>'0' && ch<='9'){
numberCount++;
}
}
//输出三种类型的字符个数
System.out.println("bigCount: " + bigCount + " x1");
System.out.println("smallCount: " + smallCount + " x1");
System.out.println("numberCount: " + numberCount + " x1");
}
}
拼接字符串
package ch3;
public class a2_8拼接字符串 {
public static void main(String[] args) {
//定义一个int类型的数组,用静态初始化完成数组元素的初始化
int[] arr = {1,2,3};
//调用下面写好的方法,用一个变量接收结果
String s = arrayToString(arr);
//输出结果
System.out.println("s:" + s);
}
//定义一个方法,用于把int数组中的数据按照指定格式拼接成一个字符串返回
public static String arrayToString(int[] arr){
//在方法中遍历数组,按照要求进行拼接
String s = "";
//拼接
s += "[";
for(int i=0; i<arr.length; i++){
if(i == arr.length-1){ //如果遍历到最后一个元素
s += arr[i];
} else{
s += arr[i];
s += ", ";//如何不是最后一个元素,还要拼接进去一个逗号和空格
}
}
s += "]";
return s;
}
}
字符串翻转
xxxxxxxxxx
package ch3;
import java.util.Scanner;
public class a2_9字符串翻转 {
public static void main(String[] args) {
//键盘录入一个字符串,用Scanner实现
Scanner sc = new Scanner(System.in);
System.out.println("please input a String:");
String line = sc.nextLine();
//调用方法
String s = reverse(line);//reverse是下面写的方法,line是参数
//输出结果
System.out.println("s:" + s);
}
//定义一个方法实现字符串的翻转
public static String reverse(String s) {
//在方法中把字符串倒着遍历,然后把每一个得到的字符拼接成一个字符串并返回
String ss = "";
//拼接
for(int i=s.length()-1; i>=0; i--){ //倒着遍历
ss += s.charAt(i);
}
return ss;
}
}