文章目录
- 1.API
- 1.1 API概述-帮助文档的使用
- 1.2 键盘录入字符串
- 2. String类
- 2.1 String概述
- 2.2 String类的构造方法
- 2.4 创建字符串对象的区别对比
- 2.5 字符串的比较
- 2.5.1 字符串的比较
- 2.6 用户登录案例【应用】
- 2.7 遍历字符串案例【应用】
- 2.8 手机号屏蔽-字符串截取 substring
- 2.9 敏感词替换-字符串替换 replace
- 2.10 切割字符串 split
- 2.11 String方法小结 ★★
- 3 StringBuilder类
- 3.1 StringBuilder类概述
- 3.2 StringBuilder类和String类的区别
- 3.3 StringBuilder类的构造方法
- 3.4 StringBuilder常用的成员方法
- 3.5StringBuilder和String相互转换【应用】
- 3.6 StringBuilder拼接字符串案例
1.API
1.1 API概述-帮助文档的使用
- 什么是API
API (Application Programming Interface) :应用程序编程接口 - java中的API
指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。
如何使用API帮助文档 :
- 打开帮助文档
- 找到索引选项卡中的输入框
- 在输入框中输入Random
- 看类在哪个包下
- 看类的描述
- 看构造方法
- 看成员方法
jdk_API_1.6.CHM 是汉化得最好的一个版本,建议还是使用1.6.chm
1.2 键盘录入字符串
Scanner类 :
next() : 遇到了空格, 就不再录入数据了 , 结束标记: 空格, tab键
nextLine() : 可以将数据完整的接收过来 , 结束标记: 回车换行符
代码实现 :
next类型() 正常录入 【即:空格,enter, tab 作为分隔开符号】
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x=sc.nextInt();//遇到了空格, 就不再录入数据了 , 结束标记: 空格, tab键
System.out.println(x);
}
测试一:
测试二:
测试三:
多次录入分隔符测试:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
System.out.println("x = " + x);
int y = sc.nextInt();
System.out.println("y = " + y);
}
enter作为分隔符:
空格分隔符:
多个空格分隔符:
TAB分隔符:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String ss=sc.nextLine();//录入一行 必须是String
System.out.println(ss);
}
没有nextString(), 所以next()就是nextString()
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String ss=sc.next();//正常录入String 因为没有nextString()
System.out.println(ss);
}
nextInt和nextLine方法配合使用的时候, nextLine方法就没有键盘录入的机会了
建议: 今后键盘录入数据的时候, 如果是字符串和整数一起接受, 建议使用next方法接受字符串
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x=sc.nextInt();
System.out.println("x = " + x);
String ss=sc.nextLine();//正常录入String 因为没有nextString()
System.out.println(ss);
}
enter直接bug似的
空格好一点 10后开始录入一行
明确了类型就用明确类型比较好,但是千万注意只要之前有过输入nextLine不等你再输入自己就去读了
LX:录入 int string double string
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x=sc.nextInt();
System.out.println("x = " + x);
String ss=sc.next();//正常录入String 因为没有nextString()
System.out.println("ss = " + ss);
double dd=sc.nextDouble();
System.out.println("dd = " + dd);
ss=sc.next();
System.out.println("ss = " + ss);
}
正常enter分隔符:
一行空格、TAB分隔符:(和c/c++一样正常了)
2. String类
2.1 String概述
1 String 类在 java.lang 包下,所以使用的时候不需要导包
2 String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象
3 字符串不可变,它们的值在创建后不能被更改
2.2 String类的构造方法
千万注意是java.lang包下的String不是其他什么包下的,否则会有奇怪的错误
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'};
//System.out.println("chs = " + chs);//不像c、c++ cs不是首地址了 不能直接这么输出了
String s2= new String(chs);
System.out.println("s2 = " + s2);
// public String(String original) : 根据传入的字符串内容,来创建字符串对象
String s3 = new String("12345");
System.out.println("s3 = " + s3);
// 直接"zifucuan"赋值 最简单方式
String s4="直接赋值";
System.out.println("s4 = " + s4);
}
2.4 创建字符串对象的区别对比
- 通过构造方法创建
通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同 - 直接赋值方式创建 所以还是推荐简单的方式咯
以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护
2.5 字符串的比较
2.5.1 字符串的比较
- == 比较基本数据类型:比较的是具体的值
- == 比较引用数据类型:比较的是对象地址值 (除非重写equals方法)
String类 : public boolean equals(String s) 比较两个字符串内容是否相同、区分大小写
代码 :
public static void main(String[] args) {
String s1 = "abc";
String s2 = "ABC";
String s3 = "abc";
// equals : 比较字符串内容, 区分大小写
System.out.println(s1.equals(s2));//false
System.out.println(s1.equals(s3));//true
// equalsIgnoreCase : 比较字符串内容, 忽略大小写
System.out.println(s1.equalsIgnoreCase(s2));//true
}
2.6 用户登录案例【应用】
案例需求 :
已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示
**实现步骤 : **
- 已知用户名和密码,定义两个字符串表示即可
- 键盘录入要登录的用户名和密码,用 Scanner 实现
- 拿键盘录入的用户名、密码和已知的用户名、密码进行比较,给出相应的提示。
- 字符串的内容比较,用equals() 方法实现
- 用循环实现多次机会,这里的次数明确,采用for循环实现,并在登录成功的时候,使用break结束循
代码实现 :
import java.util.Scanner;
public class StringLX_ThreeLogin {
public static String USERNAME="admin";
public static String PASSWORD="123";
public static void main(String[] args) {
int T=3;
Scanner sc = new Scanner(System.in);
for(int i=1;i<=T;i++){
System.out.print("请输入用户名(enter结束):");
String username=sc.nextLine();
System.out.print("请输入密码(enter结束):");
String password = sc.nextLine();
if(USERNAME.equals(username)&&PASSWORD.equals(password)){
System.out.println("登录成功~");
break;
}else {
System.out.print("登录失败!");
int t=T-i;
if(t>0) System.out.println(" 您还有"+t+"次机会重新登录~");
else {
System.out.println("今天登录机会用完~");
break;
}
}
}
}
}
2.7 遍历字符串案例【应用】
案例需求 :
键盘录入一个字符串,使用程序实现在控制台遍历该字符串
实现步骤 :
- 键盘录入一个字符串,用 Scanner 实现
- 遍历字符串,首先要能够获取到字符串中的每一个字符, public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的
- 遍历字符串,其次要能够获取到字符串的长度, public int length():返回此字符串的长度
- 遍历打印
简而言之:将java String 拆开来一个字符一个字符地输出
代码实现 :
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s=sc.nextLine();
for(int i=0;i<s.length();i++){
System.out.println(s.charAt(i));
//System.out.println(s[i]);//编译不过 不能像C++那样下标访问
}
System.out.println("想C++那样数组访问:");
char[] chs = s.toCharArray();//转换为字符数组即可
for(int i=0;i<chs.length;i++){
System.out.print(chs[i]+" ");
}
}
2.8 手机号屏蔽-字符串截取 substring
案例需求 :
以字符串的形式从键盘接受一个手机号,将中间四位号码屏蔽
最终效果为:156****1234
实现步骤 :
- 键盘录入一个字符串,用 Scanner 实现
- 截取字符串前三位
- 截取字符串后四位
- 将截取后的两个字符串,中间加上****进行拼接,输出结果
代码实现 :
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String start = s.substring(0,3);//左闭右开 [0,3) 也就是 0 1 2 下标0到下标(3-1)
String end= s.substring(7);//7往后截取完毕
System.out.println(start+"****"+end);
}
2.9 敏感词替换-字符串替换 replace
案例需求 :
键盘录入一个 字符串,如果字符串中包含(TMD),则使用***替换
实现步骤 :
- 键盘录入一个字符串,用 Scanner 实现
- 替换敏感词
String replace(CharSequence target, CharSequence replacement)
将当前字符串中的target内容,使用replacement进行替换,返回新的字符串 - 输出结果
代码实现 :
public static void main(String[] args) {
String s="ATMDONE";
String newS= s.replace("TMD","***");
System.out.println(newS);
System.out.println(s);//本身不改变 不动内存 只是创造副本
//replace(被替换子串,替换后内容);
}
2.10 切割字符串 split
案例需求 :
以字符串的形式从键盘录入学生信息,例如:“张三 , 23”
从该字符串中切割出有效数据,封装为Student学生对象
实现步骤 :
- 编写Student类,用于封装数据
- 键盘录入一个字符串,用 Scanner 实现
- 根据逗号切割字符串,得到(张三)(23)
String[] split(String regex) :根据传入的字符串作为规则进行切割
将切割后的内容存入字符串数组中,并将字符串数组返回 - 从得到的字符串数组中取出元素内容,通过Student类的有参构造方法封装为对象
- 调用对象getXxx方法,取出数据并打印。
代码实现 :
public class StringSplit {
public static void main(String[] args) {
String s="云天河,18";
String[] strs = s.split(",");// 传chat ‘,’报错 只能传递String ","
Student stu = new Student(strs[0], Integer.parseInt(strs[1]));
System.out.println(stu.getName()+" "+stu.getAge());
}
}
class Student{
private String name;
private Integer age;
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
2.11 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)
3 StringBuilder类
3.1 StringBuilder类概述
概述 : StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是 StringBuilder 对象中的内容是可变的
3.2 StringBuilder类和String类的区别
- String类内容是不可变的
- StringBuilder类内容是可变的
3.3 StringBuilder类的构造方法
常用的构造方法
方法名 | 说明 |
public StringBuilder() | 创建一个空白可变字符串对象,不含有任何内容 |
public StringBuilder(String str) | 根据字符串的内容,来创建可变字符串对象 |
public static void main(String[] args) {
StringBuilder sb1 = new StringBuilder();
System.out.println("sb1 = " + sb1);
System.out.println("sb1.length = "+sb1.length());
StringBuilder sb2 = new StringBuilder("hello");
System.out.println("sb2 = " + sb2);
System.out.println("sb1.length = "+sb2.length());
}
3.4 StringBuilder常用的成员方法
- 添加和反转方法
方法名 | 说明 |
public StringBuilder append(任意类型) | 添加数据,并返回对象本身 |
public StringBuilder reverse() | 返回相反的字符序列 |
- 示例代码
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
//public StringBuilder append(任意类型):添加数据,并返回对象本身
//sb.append() 看代码提示 可以append 任意类型
sb.append("hello").append(123).append(" world").append(567.789);
System.out.println(sb);//直接修改了 sb 本身
System.out.println();
sb.reverse();
System.out.println(sb);
System.out.println(sb.reverse());
}
3.5StringBuilder和String相互转换【应用】
- StringBuilder转换为String
public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String - String转换为StringBuilder
public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder - 示例代码
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("hello");
// String s=sb; 报错
String s=sb.toString();
System.out.println("s = " + s);
System.out.println("---------------------------------");
String s1="hello";
// StringBuilder sb1=s1; //报错
StringBuilder sb1 = new StringBuilder(s1);
System.out.println("sb1 = " + sb1);
}
3.6 StringBuilder拼接字符串案例
案例需求 :
定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,
并在控制台输出结果。例如,数组为int[] arr = {1,2,3}; ,执行方法后的输出结果为:[1, 2, 3]
实现步骤 :
- 定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
- 定义一个方法,用于把 int 数组中的数据按照指定格式拼接成一个字符串返回。
返回值类型 String,参数列表 int[] arr - 在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回
- 调用方法,用一个变量接收结果
- 输出结果
代码实现 :
public class SB03_intToString {
public static void main(String[] args) {
int[] arr={1,2,3,4};
String str = IntArrayToString(arr);
System.out.println("str = " + str);
System.out.println("str.length = " + str.length());
}
public static String IntArrayToString(int[] arr){
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length-1; i++) {
sb.append(arr[i]+",");//sb.append的好处 不用进行类型转换 可以传入任意类型
}
sb.append(arr[arr.length-1]+"]");
//StringBuilder用来执行操作 String用来返回使用
return sb.toString();
}
}