字符串
1. API
1.1 API 概述
1.2 JDK帮助文档
需要下载API帮助文档,学会查用即可
1.3 API使用练习
package test1;
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
//创建对象
Scanner sc = new Scanner(System.in);
//就收数据
System.out.println("请输入一个字符串数据");
String line = sc.nextLine();
//输出结构
System.out.println("你输入的数据是:" + line);
}
}
2. String
2.1 String概述
2.2 String 构造方法
package test2;
public class StringDemo {
public static void main(String[] args) {
//public String():创建空白字符串对象,不包含任何内容
String s1 = new String();
System.out.println("s1:" + s1);
//public String(char[] chs): 根据字符数组的内容,来创建字符串对象
char[] chs = {'a', 'b', 'c'};
String s2 = new String(chs);
System.out.println("s2:" + s2);
//public String(byte[] chs): 根据字节数组的内容,来创建字符串对象
byte[] bys = {97, 98, 99};
String s3 = new String(bys);
System.out.println("s3:" + s3);
//String s = "abc";直接赋值
String s4 = "abc";
System.out.println("s4:" + s4);
}
}
推荐使用直接赋值的方法来创建字符串
2.3 String对象的特点
package test2;
public class StringDemo_1 {
public static void main(String[] args) {
// 构造方法得到对象
char[] chs = {'a', 'b', 'c'};
String s1 = new String(chs);
String s2 = new String(chs);
System.out.println(s1 == s2);
// 直接赋值得到对象
String s3 = "abc";
String s4 = "abc";
System.out.println(s3 == s4);
System.out.println(s1 == s3);
}
}
2.4 字符串的比较
package test2;
public class StringDemo_1 {
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(s3 == s4);
System.out.println(s1 == s3);
System.out.println("--------");
//比较字符串内容是否相同
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println(s3.equals(s4));
}
}
案例:用户登录
package test2;
import java.util.Scanner;
public class StringDemo_2 {
public static void main(String[] args) {
//已知用户名和密码,用两个字符串表示即可
String username = "you_best_friend";
String password = "JoJo";
//for循环实现多次登录
for (int i = 0; i < 3; i++) {
//键盘录入登录的用户名和密码,用Scanner实现
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String name = sc.nextLine();
System.out.println("请输入密码:");
String pwd = sc.nextLine();
//登录,字符串比较,用equals()实现
if (name.equals(username) && pwd.equals(password)) {
System.out.println("登录成功");
break;
} else {
if (2 - i == 0){
System.out.println("你的账户被锁定,请与管理员联系");
}else {
System.out.println("登录失败,你还有" + (2 - i) + "次机会");
}
}
}
}
}
案例:遍历字符串
package test2;
import java.util.Scanner;
public class StringDemo_3 {
public static void main(String[] args) {
//键盘录入一个字符串,用Scanner实现
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String line = sc.nextLine();
//遍历字符串
for (int i = 0; i < line.length(); i++) {
System.out.println(line.charAt(i));
}
}
}
案例:统计字符次数
package test2;
import java.util.Scanner;
public class StringDemo_4 {
public static void main(String[] args) {
//键盘录入一个字符串,用Scanner实现
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
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);
//判断类型
if (ch >= 'A' && ch <= 'Z') {
bigCount++;
} else if (ch >= 'a' && ch <= 'z'){
smallCount++;
}else if (ch>='0'&&ch<='9'){
numberCount++;
}
}
//输出个数
System.out.println("大写字母:" + bigCount + "个");
System.out.println("小写字母:" + smallCount + "个");
System.out.println("数字:" + numberCount + "个");
}
}
案例:拼接字符串
package test2;
public class StringDemo_5 {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
String s = arrayToString(arr);
System.out.println(s);
}
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];
s += "]";
} else {
s += arr[i];
s += ", ";
}
}
return s;
}
}
案例:字符串反转
package test2;
import java.util.Scanner;
public class StringDemo_6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String line = sc.nextLine();
String s = 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;
}
}
2.5 帮助文档中String方法
略
3. StringBuilder
3.1 StringBuilder概述
StringBuilder 是一个可变的字符串类,我们可以把它看成一个容器,这里的可变指的是 StringBuilder对象中的内容是可变的。
String 和 StringBuilder 的区别:
- String:内容是不可变的
- StringBuilder:内容是可变的
3.2 StringBuilder的构造方法
package test1;
public class StringBuilderDemo {
public static void main(String[] args) {
//方法1
StringBuilder sb = new StringBuilder();
System.out.println("sb:" + sb);
System.out.println("sb.length():" + sb.length());
//方法2
StringBuilder sb2 =new StringBuilder("hello");
System.out.println("sb2:" + sb2);
System.out.println("sb2.length():" + sb2.length());
}
}
3.3 StringBuilder的添加和反转
package test1;
public class StringBuilderDemo_01 {
public static void main(String[] args) {
//创建对象
StringBuilder sb = new StringBuilder();
StringBuilder sb2 = sb.append("hello");
System.out.println("sb:" + sb);
System.out.println("sb2" + sb2);
System.out.println(sb==sb2);
/*
sb.append("hello");
sb.append("world");
sb.append("java");
sb.append(100);
*/
//链式编程
sb.append("hello").append("world").append("java").append(100);
System.out.println("sb2:" + sb2);
sb.reverse();
System.out.println("sb2:" + sb2);
}
}
3.4 StringBuilder 和 String 的相互转换
package test1;
public class StringBuilderDemo_02 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("hello");
//把StringBuilder转换为String
String s = sb.toString();
System.out.println(s);
//把String转换为StringBuilder
StringBuilder sb2 = new StringBuilder(s);
System.out.println(sb2);
}
}
案例:拼接字符串
package test1;
public class StringBuilderDemo_03 {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
String s = arrayToString(arr);
System.out.println("s:" + s);
}
public static String arrayToString(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]).append(",");
}
}
sb.append("]");
String s = sb.toString();
return s;
}
}
案例:字符串反转
package test1;
import java.util.Scanner;
public class StringBuilderDemo_04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String line = sc.nextLine();
String sb = myReverse(line);
System.out.println("sb:" + sb);
}
public static String myReverse(String line) {
/*
StringBuilder sc = new StringBuilder(line);
sc.reverse();
String s = sc.toString();
return s;
*/
//两个方法等价
return new StringBuilder(line).reverse().toString();
}
}