1.13 String 和StringBuilder
1 String
1.1字符串的比较【理解】
1.1.1==号的作用
比较基本数据类型:比较的是具体的值
比较引用数据类型:比较的是对象地址值
1.1.2equals方法的作用
方法介绍:
public boolean equls(String s) 比较两个字符串内容是否相同、区分大小写
示例:
/*
equals方法介绍
比较两个字符串内容是否相同、区分大小写
*/
public class StringDemo01 {
public static void main(String[] args) {
// 构造方法得到对象
char[] chs = {'a', 'b', 'z'};
String s1 = new String(chs);
String s2 = new String(chs);
// 直接赋值的方式
String s3 = "abz";
String s4 = "abz";
// 比较字符串地址是否相同
System.out.println(s1 == s2); // false
System.out.println(s1 == s3); // false
System.out.println(s3 == s4); // true
// 比较字符串内容是否相同
System.out.println(s1.equals(s2)); // true
System.out.println(s1.equals(s3)); // true
System.out.println(s3.equals(s4)); // true
}
}
1.2用户登录案例【应用】
1.2.1案例需求
已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示
package demo07.demo01;
import java.util.Scanner;
/*
#### 1.2.1案例需求
已知用户名和密码,请用程序实现模拟用户登录。
总共给三次机会,登录之后,给出相应的提示
*/
public class StringTest01 {
public static void main(String[] args) {
String name = "joker";
String code = "abc123";
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("请输入用户名");
String username = sc.nextLine();
System.out.println("请输入密码");
String password = sc.nextLine();
System.out.println("--------------");
if (name.equals(username) && code.equals(password)) {
System.out.println("登陆成功!!!" + username + " 欢迎你。");
break;
} else {
if (2 - i == 0) {
System.out.println("您的账户已经被锁定,请联系管理员。");
} else {
System.out.println("对不起,用户名或密码不正确。请重新输入。机会:" + (2-i));
}
}
}
}
}
1.3遍历字符串案例【应用】
1.3.1案例需求
键盘录入一个字符串,使用程序实现在控制台遍历该字符串
package demo07.demo01;
import java.util.Scanner;
/*
#### 1.3.1案例需求
键盘录入一个字符串,使用程序实现在控制台遍历该字符串
*/
public class StringTest02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串!");
String str = sc.nextLine();
fun(str);
}
// 定义遍历方法。
public static void fun(String str) {
for (int i = 0; i < str.length(); i++) {
char ch= str.charAt(i);
System.out.print(ch + " ");
}
}
}
1.4统计字符次数案例【应用】
1.4.1案例需求
键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他
字符)
package demo07.demo01;
import java.util.Scanner;
/*
1.4统计字符次数案例【应用】
1.4.1案例需求
键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,
数字字符出现的次数(不考虑其他字符)
*/
public class StringTest03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串。");
String str = sc.nextLine();
fun(str);
}
// 定义方法
public static void fun(String str) {
int a = 0;
int b = 0;
int c = 0;
int d = 0;
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (ch >= 'A' && 'Z' >= ch) {
a++;
} else if (ch >= 'a' && 'z' >= ch) {
b++;
} else if (ch >= '0' && '9' >= ch) {
c++;
} else {
d++;
}
}
System.out.println("大写:" + a);
System.out.println("小写:" + b);
System.out.println("数字:" + c);
System.out.println("其他:" + d);
}
}
1.5字符串拼接案例【应用】
1.5.1案例需求
定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,
并在控制台输出结果。例如,数组为 int[] arr = {1,2,3}; ,执行方法后的输出结果为:[1, 2, 3]
/*
### 1.5字符串拼接案例【应用】
#### 1.5.1案例需求
定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,
并在控制台输出结果。例如,数组为 int[] arr = {1,2,3};
执行方法后的输出结果为:[1, 2, 3]
*/
public class StringTest04 {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
String str = fun(arr);
System.out.println(str);
}
private static String fun(int[] arr) {
String str = "[";
for (int i = 0; i < arr.length; i++) {
if (i == arr.length-1) {
str+=(arr[i] + "]");
} else {
str+=(arr[i] + ", ");
}
}
return str;
}
}
1.6字符串反转案例【应用】
1.6.1案例需求
定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果
例如,键盘录入 abc,输出结果 cba
import java.util.Scanner;
/*
### 1.6字符串反转案例【应用】
#### 1.6.1案例需求
定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果
例如,键盘录入 abc,输出结果 cba
*/
public class StringTest05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串");
String str1 = sc.nextLine();
String str = fun(str1);
System.out.println(str);
}
private static String fun(String str1) {
String str = "";
for (int i = str1.length() - 1; i >= 0; i--) {
str+=str1.charAt(i);
}
return str;
}
}
1.7 帮助文档查看String常用方法【记忆】
方法名 | 说明 |
---|---|
public boolean equals(Object anObject) | 比较字符串的内容,严格区分大小写(用户名和密码) |
public char charAt(int index) | 返回指定索引处的 char 值 |
public int length() | 返回此字符串的长度 |
2 StringBuilder类
2.1StringBuilder类概述【理解】
StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是
StringBuilder 对象中的内容是可变的
2.2StringBuilder类和String类的区别【理解】
String类:内容是不可变的
StringBuilder类:内容是可变的
2.3StringBuilder类的构造方法【记忆】
常用构造方法
方法名 | 说明 |
---|---|
public StringBuilder() | 创建一个空白可变字符串对象,不含有任何内容 |
public StringBuilder(String str) | str) 根据字符串的内容,来创建可变字符串对象 |
示例:
package demo07.demo01;
public class StringTest06 {
public static void main(String[] args) {
// public StringBuilder() :创建一个空白可变的字符串对象,不含有任何内容。
StringBuilder sb = new StringBuilder();
System.out.println(sb);
System.out.println(sb.length());
System.out.println("-----------");
// public StringBuilder(String str) :根据字符串的内容,来创建可变字符串对象
StringBuilder sb2 = new StringBuilder("hello");
System.out.println(sb2);
System.out.println(sb2.length());
}
}
2.4StringBuilder类添加和反转方法【记忆】
添加和反转方法
方法名 | 说明 |
---|---|
public StringBuiilder append(任意类型) | 添加数据,并且返回对象本身 |
public StringBuilder reverse() | 返回相反的字符序列 |
方法名说明
package demo07.demo01;
public class StringTest07 {
public static void main(String[] args) {
// 创建对象
StringBuilder sb = new StringBuilder();
// public StringBuilder append(任意类型):添加数据,并返回对象本身
StringBuilder sb2 = sb.append("hello");
System.out.println(sb);
System.out.println(sb2);
System.out.println(sb == sb2); // true
// 链式编程
sb.append("hello").append("world").append("java").append(100);
System.out.println(sb);
// public StringBuilder reverse() :返回相反的字符序列
sb.reverse();
System.out.println(sb);
}
}
2.5 StringBuilder和String相互转换【应用】
StringBuilder转换为String
public String toString() :通过toString()就可以实现把 StringBuilder 转换为 String
String转换为StringBuilder
public StringBuilder(String s) :通过构造方法就可以实现把 String 转换为 StringBuilder
示例代码
package demo07.demo01;
public class StringTest08 {
public static void main(String[] args) {
// StringBuilder 转换为 String
StringBuilder sb = new StringBuilder();
sb.append("hello");
// 使用 public String toString() :
// 过toString方法就可以实现StringBuilder转换为String
String s = sb.toString();
System.out.println(s);
// String 转换为 StringBuilder
String s1 = "world";
// public StringBuilder(String sb) :
// 通过构造方法就可以实现把String 转换为 StringBuilder
StringBuilder sb2 = new StringBuilder(s1);
System.out.println(sb2);
}
}
2.6字符串拼接升级版案例【应用】
2.6.1案例需求
定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,
并在控制台输出结果。例如,数组为int[] arr = {1,2,3}; ,执行方法后的输出结果为:[1, 2, 3]
代码实现:
package demo07.demo01;
/*
2.6字符串拼接升级版案例【应用】
#### 2.6.1案例需求
定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,
并在控制台输出结果。例如,数组为int[] arr = {1,2,3};
执行方法后的输出结果为:[1, 2, 3]
*/
public class StringTest09 {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
String s = fun(arr);
System.out.println(s);
}
private static String fun(int[] arr) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if (i == (arr.length-1)){
sb.append(arr[i] + "]");
} else {
sb.append(arr[i] + ", ");
}
}
String s = sb.toString();
return s;
}
}
2.7字符串反转升级版案例【应用】
2.7.1案例需求
定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果
例如,键盘录入abc,输出结果 cba
package demo07.demo01;
import java.util.Scanner;
/*
2.7字符串反转升级版案例【应用】
2.7.1案例需求
定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果
例如,键盘录入abc,输出结果 cba
*/
public class StringTest10 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String s = sc.nextLine();
s = fun(s);
System.out.println(s);
}
private static String fun(String s) {
StringBuilder sb = new StringBuilder(s);
sb.reverse();
String s1 = sb.toString();
return s1;
}
}
2.8帮助文档查看StringBuilder常用方法【记忆】
方法名 | 说明 |
---|---|
public StringBuilder(任意类型) | 添加数据,并返回对象本身 |
public StringBuilder() | 返回相反的字符序列 |
public int length() | 返回长度,实际存储值 |
public Stirng toString() | 通过toString()就可以实现把StringBuilder转换为 String |
扩展题:
题目1:
请定义一个方法用于判断一个字符串是否是对称的字符串,并在主方法中测试方法。例如:“abcba”、"上海自来水来自海上"均为对称字符串。
package demo07.demo01;
import java.util.Scanner;
/*
### 题目1:
请定义一个方法用于判断一个字符串是否是对称的字符串,并在主方法中测试方法。
例如:"abcba"、"上海自来水来自海上"均为对称字符串。
*/
public class StringTest11 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串");
String s = sc.nextLine();
fun(s);
}
private static void fun(String s) {
StringBuilder sb = new StringBuilder(s);
StringBuilder rs = sb.reverse();
if (s.equals(rs)){
System.out.println("对称。");
} else {
System.out.println("不对称。");
}
}
}