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都会申请一个内存空间,虽然内存相同,但是地址值不同
xxxxxxxxxxchar[] 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):将此字符串与指定对象进行比较,由于我们比较的是字符串对象,所以参数直接传递一个字符串
xxxxxxxxxxpackage 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)); } }}
统计字符串次数
xxxxxxxxxxpackage 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; }}
字符串翻转
xxxxxxxxxxpackage 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; }}