1、String概述
1 String 类在 java.lang 包下,所以使用的时候不需要导包
2 String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象
3 字符串不可变,它们的值在创建后不能被更改
2、String类的构造方法
常用的构造方法
package com.itheima.string;
public class Demo2StringConstructor {
/*
String类常见构造方法:
public String() : 创建一个空白字符串对象,不含有任何内容
public String(char[] chs) : 根据字符数组的内容,来创建字符串对象
public String(String original) : 根据传入的字符串内容,来创建字符串对象
String s = “abc”; 直接赋值的方式创建字符串对象,内容就是abc
注意:
String这个类比较特殊, 打印其对象名的时候, 不会出现内存地址
而是该对象所记录的真实内容.
*/
public static void main(String[] args) {
// public String() : 创建一个空白字符串对象,不含有任何内容
String s1 = new String();
System.out.println(s1);
// public String(char[] chs) : 根据字符数组的内容,来创建字符串对象
char[] chs = {'a','b','c'};
String s2 = new String(chs);
System.out.println(s2);
// public String(String original) : 根据传入的字符串内容,来创建字符串对象
String s3 = new String("123");
System.out.println(s3);
}
}
3、创建字符串对象的区别对比
-
通过构造方法创建
通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同
-
直接赋值方式创建
以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护
5、字符串的比较
字符串的比较
-
== 比较基本数据类型:比较的是具体的值
-
== 比较引用数据类型:比较的是对象地址值
-
package com.itheima.stringmethod; public class Demo1Equals { public static void main(String[] args) { String s1 = "abc"; String s2 = "ABC"; String s3 = "abc"; // equals : 比较字符串内容, 区分大小写 System.out.println(s1.equals(s2)); System.out.println(s1.equals(s3)); // equalsIgnoreCase : 比较字符串内容, 忽略大小写 System.out.println(s1.equalsIgnoreCase(s2)); } }
6、关于String的几个例子
- 1、用户登录
import java.util.Scanner; public class Test1 { /* 需求:已知用户名和密码,请用程序实现模拟用户登录。 总共给三次机会,登录之后,给出相应的提示 思路: 1. 已知用户名和密码,定义两个字符串表示即可 2. 键盘录入要登录的用户名和密码,用 Scanner 实现 3. 拿键盘录入的用户名、密码和已知的用户名、密码进行比较,给出相应的提示。 字符串的内容比较,用equals() 方法实现 4. 用循环实现多次机会,这里的次数明确,采用for循环实现,并在登录成功的时候,使用break结束循环 */ public static void main(String[] args) { // 1. 已知用户名和密码,定义两个字符串表示即可 String username = "admin"; String password = "123456"; // 2. 键盘录入要登录的用户名和密码,用 Scanner 实现 Scanner sc = new Scanner(System.in); // 4. 用循环实现多次机会,这里的次数明确,采用for循环实现 for(int i = 1; i <= 3; i++){ System.out.println("请输入用户名:"); String scUsername = sc.nextLine(); System.out.println("请输入密码:"); String scPassword = sc.nextLine(); // 3. 拿键盘录入的用户名、密码和已知的用户名、密码进行比较,给出相应的提示。 if(username.equals(scUsername) && password.equals(scPassword)){ System.out.println("登录成功"); break; }else{ if(i == 3){ System.out.println("您的登录次数已达到今日上限, 请明天再来"); }else{ System.out.println("登录失败,您还剩余" + (3-i) +"次机会"); } } } } }
2、遍历字符串
-
import java.util.Scanner; public class Test2 { /* 需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串 思路: 1. 键盘录入一个字符串,用 Scanner 实现 2. 遍历字符串,首先要能够获取到字符串中的每一个字符 public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的 3. 遍历字符串,其次要能够获取到字符串的长度 public int length():返回此字符串的长度 4. 遍历打印 9 */ public static void main(String[] args) { // 1. 键盘录入一个字符串,用 Scanner 实现 Scanner sc = new Scanner(System.in); System.out.println("请输入:"); String s = sc.nextLine(); // 2. 遍历字符串,首先要能够获取到字符串中的每一个字符 for(int i = 0; i < s.length(); i++){ // i : 字符串的每一个索引 char c = s.charAt(i); System.out.println(c); } } } import java.util.Scanner; public class Test3 { /* 需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串 思路: 1. 键盘录入一个字符串,用 Scanner 实现 2. 将字符串拆分为字符数组 public char[] toCharArray( ):将当前字符串拆分为字符数组并返回 3. 遍历字符数组 */ public static void main(String[] args) { // 1. 键盘录入一个字符串,用 Scanner 实现 Scanner sc = new Scanner(System.in); System.out.println("请输入:"); String s = sc.nextLine(); // 2. 将字符串拆分为字符数组 char[] chars = s.toCharArray(); // 3. 遍历字符数组 for (int i = 0; i < chars.length; i++) { System.out.println(chars[i]); } } }
3、统计字符串
-
import java.util.Scanner; public class Test04 { public static void main(String[] args) { //1.键盘录入一个字符串,用Scanner实现 Scanner sc = new Scanner(System.in); System.out.println("请输入:"); String s = sc.nextLine(); //2.统计三种类型的字符个数,需定义三个统计变量,初始化为0 int bigCount = 0; int smallCount = 0; int numCount = 0; //3.遍历字符数组 char[] chars = s.toCharArray(); for (int i = 0; i < chars.length; i++) { char c = chars[i]; //4.判断该字符属于那种类型,然后对应类型的统计变量 if (c >= 'A' && c <= 'Z') { bigCount++; } else if (c >= 'a' && c <= 'z') { smallCount++; } else if (c >= '0' && c <= '9') { numCount++; } } //5.输出三种类型的字符个数 System.out.println("大写字母字符:" + bigCount); System.out.println("小写字母字符:" + smallCount); System.out.println("数字字符:" + numCount); } }
4、手机号屏蔽-字符串的截取
import java.util.Scanner; public class Test5 { /* 需求:以字符串的形式从键盘接受一个手机号,将中间四位号码屏蔽 最终效果为:156****1234 思路: 1. 键盘录入一个字符串,用 Scanner 实现 2. 截取字符串前三位 3. 截取字符串后四位 4. 将截取后的两个字符串,中间加上****进行拼接,输出结果 */ public static void main(String[] args) { // 1. 键盘录入一个字符串,用 Scanner 实现 Scanner sc = new Scanner(System.in); System.out.println("请输入手机号:"); String telString = sc.nextLine(); // 2. 截取字符串前三位 String start = telString.substring(0,3); // 3. 截取字符串后四位 String end = telString.substring(7); // 4. 将截取后的两个字符串,中间加上****进行拼接,输出结果 System.out.println(start + "****" + end); } }
5、敏感词汇替换
-
import java.util.Scanner; public class Test6 { /* 需求:键盘录入一个 字符串,如果字符串中包含(TMD),则使用***替换 思路: 1. 键盘录入一个字符串,用 Scanner 实现 2. 替换敏感词 String replace(CharSequence target, CharSequence replacement) 将当前字符串中的target内容,使用replacement进行替换,返回新的字符串 3. 输出结果 */ public static void main(String[] args) { // 1. 键盘录入一个字符串,用 Scanner 实现 Scanner sc = new Scanner(System.in); System.out.println("请输入:"); String s = sc.nextLine(); // 2. 替换敏感词 String result = s.replace("TMD","***"); // 3. 输出结果 System.out.println(result); } }
6、切割字符串
-
import com.itheima.domain.Student; import java.util.Scanner; public class Test7 { /* 需求:以字符串的形式从键盘录入学生信息,例如:“张三 , 23” 从该字符串中切割出有效数据,封装为Student学生对象 思路: 1. 编写Student类,用于封装数据 2. 键盘录入一个字符串,用 Scanner 实现 3. 根据逗号切割字符串,得到(张三)(23) String[] split(String regex) :根据传入的字符串作为规则进行切割 将切割后的内容存入字符串数组中,并将字符串数组返回 4. 从得到的字符串数组中取出元素内容,通过Student类的有参构造方法封装为对象 5. 调用对象getXxx方法,取出数据并打印。 */ public static void main(String[] args) { // 2. 键盘录入一个字符串,用 Scanner 实现 Scanner sc = new Scanner(System.in); System.out.println("请输入学生信息:"); String stuInfo = sc.nextLine(); // stuInfo = "张三,23"; // 3. 根据逗号切割字符串,得到(张三)(23) String[] sArr = stuInfo.split(","); // System.out.println(sArr[0]); // System.out.println(sArr[1]); // 4. 从得到的字符串数组中取出元素内容,通过Student类的有参构造方法封装为对象 Student stu = new Student(sArr[0],sArr[1]); // 5. 调用对象getXxx方法,取出数据并打印。 System.out.println(stu.getName() + "..." + stu.getAge()); } }
7、String方法小结
String类的常用方法 :
public boolean equals(Object anObject) 比较字符串的内容,严格区分大小写
public boolean equalsIgnoreCase(String anotherString) 比较字符串的内容,忽略大小写
public int length() 返回此字符串的长度
public char charAt(int index) 返回指定索引处的 char 值
public char[] toCharArray() 将字符串拆分为字符数组后返回
public String substring(int beginIndex, int endIndex) 根据开始和结束索引进行截取,得到新的字符串(包含头,不包含尾)
public String substring(int beginIndex) 从传入的索引处截取,截取到末尾,得到新的字符串
public String replace(CharSequence target, CharSequence replacement) 使用新值,将字符串中的旧值替换,得到新的字符串
public String[] split(String regex) 根据传入的规则切割字符串,得到字符串数组
8、String字符串的特点
1、Java程序中所有的双引号字符串,都是String类的对象
2、字符串不可变,他们的值在创建后不能被更改
3、虽然Stirng的值是不可变的,但是它们可以被共享