一.String类概述
String类概述:
通过JDK提供的API,查看String类的说明
- "abc"是String类的一个实例,或者成为String类的一个对象
- 字符串字面值"abc"也可以看成是一个字符串对象
- 字符串是常量,一旦被赋值,就不能被改变
- 字符串本质是一个字符数组
String类的构造方法:
- String(String original):把字符串数据封装成字符串对象
- String(char[] value):把字符数组的数据封装成字符串对象
- String(char[] value, int index, int count):把字符数组的一部分数据封装成字符串对象
String类 api文档:
image.png
二.String类案例
2.1 String类4种常用构造方法
String的构造方法:
方式1. String(String original):把字符串数据封装成字符串对象
方式2. String(char[] value):把字符数组的数据封装成字符串对象
方式3. String(char[] value, int index, int count):把字符数组的一部分数据封装成字符串对象
方式4. String():最常用的 API中表示(Java程序中所有字符串字面值 如“abc”都作为此类的实例实现)
public String toString():返回此对象本身(它已经是一个字符串!)。
代码:
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-30
* @remark String类4种常用构造方法
*
*/
public class string1 {
public static void main(String[] args) {
//方式1. String(String original):把字符串数据封装成字符串对象
String s1 = new String("hello1");
/*如果打印的不是 包名+类名+@+地址 则表示String类重写了toString方法*/
System.out.println(s1);//hello1
System.out.println("------");
//方式2. String(char[] value):把字符数组的数据封装成字符串对象
char[] value2 = {'h','e','l','l','o','2'};
String s2 = new String(value2);
System.out.println(s2);//hello2
System.out.println("------");
//方式3. String(char[] value, int index, int count):把字符数组的一部分数据封装成字符串对象
char[] value3 = {'h','e','l','l','o','3','3','3'};
String s3 = new String(value3, 0, value3.length - 2);
System.out.println(s3);//hello3
System.out.println("------");
//方式4. String():最常用的
String s4 = "hello4";
System.out.println(s4);
System.out.println("------");
}
}
测试记录:
hello1
------
hello2
------
hello3
------
hello4
------
2.2 String类创建对象两种方式
String类创建对象的特点:
A:通过构造方法创建对象
B:通过直接赋值的方式创建对象
这两种方式的创建是有区别的:
1.通过构造方法创建的字符串对象是在堆内存。
2.通过直接赋值的方式创建的字符串对象是在方法区的常量池。
内存图:
代码:
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-30
* @remark String创建对象的两种方式
*
*/
public class string2 {
public static void main(String[] args) {
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = "hello";
String s4 = "hello";
System.out.println(s1 == s2);//false
System.out.println(s1 == s3);//false
System.out.println(s3 == s4);//true
}
}
测试记录
false
false
true
2.3 String类练习之模拟用户登录
需求:
模拟登录,给三次机会,并提示还有几次
分析:
A:定义两个字符串对象,用于存储已经存在的用户名和密码
B:键盘录入用户名和密码
C:拿键盘录入的用户名和密码去跟已经存在的用户名和密码进行比较
如果内容相同,就提示登录成功
如果内容不同,就提示登录失败,并提示还有几次机会
public boolean equals(Object anObject):比较字符串的内容,严格区分大小写(用户名和密码)
public boolean equalsIgnoreCase(String anotherString):比较字符串的内容,不考虑大小写(验证码)
image.png
代码:
package Java_study;
import java.util.Scanner;
/**
*
* @author 只是甲
* @date 2021-06-30
* @remark String类练习之模拟用户登录
*
*/
public class string3 {
public static void main(String[] args) {
//定义两个字符串对象,用于存储已经存在的用户名和密码
String username = "admin";
String password = "admin";
//循环次数
int count = 0;
//键盘录入的用户名
String scName;
//键盘录入的密码
String scPassword;
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//模拟登陆,给三次机会
while (count < 3) {
System.out.println("请输入用户名:");
scName = sc.nextLine();
System.out.println("请输入密码");
scPassword = sc.nextLine();
//事件A: 用户名相等
boolean a = scName.equals(username);
//事件B:密码相等
boolean b = scPassword.equals(password);
//事件C: 错误次数小于3
boolean c = count < 2;
if (a && b) {
System.out.println("登陆成功");
break;
//用户名或密码任意一个不低,且登录次数小于3,提示次数,并重新输入
} else if (c) {
System.out.println("登陆失败,你还有" + (2 - count) + "次机会");
//用户名或密码任意一个不对,且登录次数大于3,锁定账号,并跳出循环
} else {
System.out.println("你的账号被锁定,请与管理员联系");
break;
}
//每次循环次数加1
count++;
}
}
}
测试记录:
请输入用户名:
admin
请输入密码
abc
登陆失败,你还有2次机会
请输入用户名:
请输入密码
登陆失败,你还有1次机会
请输入用户名:
admin
请输入密码
admin
登陆成功
2.4 String类遍历字符串
需求:
遍历字符串(获取字符串中的每一个字符)
public char charAt(int index):
返回指定索引处的值
public int length():
返回字符串中的字符个数,字符串的长度
image.png
代码:
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-30
* @remark INDEX_STATISTICS
*/
public class string4 {
public static void main(String[] args) {
//要遍历字符串,你首先得有一个字符串
String s = "abcde";
//思考:如何获取字符串中的每一个字符
//假如让我们来提供方法,我们应该提供一个根据索引返回指定位置的字符的方法
//返回值:char
//形式参数:int index
//public char charAt(int index):返回指定索引处的值
//原始做法
System.out.println(s.charAt(0));
System.out.println(s.charAt(1));
System.out.println(s.charAt(2));
System.out.println(s.charAt(3));
System.out.println(s.charAt(4));
System.out.println("----------");
//用for循环改进
for (int i = 0; i < s.length(); i++) {
System.out.println(s.charAt(i));
}
System.out.println("----------");
}
}
测试记录:
a
b
c
d
e
----------
a
b
c
d
e
----------
2.5 String类字符串拼接
需求:
把数组中的数据按照指定个格式拼接成一个字符串
举例:int[] arr = {1,2,3};
输出结果:[1, 2, 3]
分析:
A:定义一个int类型的数组
B:写方法实现把数组中的元素按照指定的格式拼接成一个字符串
C:调用方法
D:输出结果
代码:
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-30
* @remark String类字符串拼接
*
*/
public class string5 {
public static void main(String[] args) {
//定义一个int类型的数组
int[] arr = {1,2,3};
String result = arrayToString(arr);
System.out.print(result);
}
public static String arrayToString(int[] arr) {
String s = "[";
for (int i = 0; i < arr.length; i++) {
s += arr[i];
//如果不是最后一个元素,则再拼个逗号 ,
if (i != arr.length - 1) {
s += ",";
//如果是最后一个元素,则再拼个右括号 ]
} else {
s += "]";
}
}
return s;
}
}
测试记录:
[1,2,3]
2.6 String类字符串反转
需求:
字符串反转
举例:键盘录入”abc”
输出结果:”cba”
分析:
A:键盘录入字符串数据
B:写方法实现字符串数据的反转
把字符串倒着遍历,在把每一个得到的字符拼接成一个字符串
C:调用方法
D:输出结果
代码:
package Java_study;
import java.util.Scanner;
/**
*
* @author 只是甲
* @date 2021-06-30
* @remark String类字符串反转
*
*/
public class string6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = sc.nextLine();
//写方法实现字符串数据的翻转
//调用方法
String result = reverse(s);
//输出结果
System.out.println(result);
}
public static String reverse(String source) {
String result = "";
//反向for循环
for (int i = source.length() - 1; i >= 0; i--) {
result += source.charAt(i);
}
return result;
}
}
测试记录:
请输入一个字符串:
adefesefaae
eaafesefeda!QAZxsw2
网友评论