01api概述

jdk-9_汉化版.chm
JavaEEAPi.chm

02键盘录入字符串

  1. package com.itheima.api;
  2. import java.util.Scanner;
  3. public class Demo1Scanner {
  4. /*
  5. next() : 遇到了空格, 就不再录入数据了
  6. 结束标记: 空格, tab键
  7. nextLine() : 可以将数据完整的接收过来
  8. 结束标记: 回车换行符
  9. */
  10. public static void main(String[] args) {
  11. // 1. 创建Scanner对象
  12. Scanner sc = new Scanner(System.in);
  13. System.out.println("请输入:");
  14. // 2. 调用nextLine方法接收字符串
  15. // ctrl + alt + v : 快速生成方法的返回值
  16. String s = sc.nextLine();
  17. System.out.println(s);
  18. }
  19. }
  1. package com.itheima.api;
  2. import java.util.Scanner;
  3. public class Demo2Scanner {
  4. /*
  5. nextInt和nextLine方法配合使用的时候, nextLine方法就没有键盘录入的机会了
  6. 建议: 今后键盘录入数据的时候, 如果是字符串和整数一起接受, 建议使用next方法接受字符串.
  7. */
  8. public static void main(String[] args) {
  9. Scanner sc = new Scanner(System.in);
  10. System.out.println("请输入整数:");
  11. int num = sc.nextInt(); // 10 + 回车换行
  12. System.out.println("请输入字符串:");
  13. String s = sc.nextLine();
  14. System.out.println(num);
  15. System.out.println(s);
  16. }
  17. }

03String概述

  1. package com.itheima.domain;
  2. public class Student {
  3. private String name;
  4. private String age;
  5. public Student() {
  6. }
  7. public Student(String name, String age) {
  8. this.name = name;
  9. this.age = age;
  10. }
  11. public String getName() {
  12. return name;
  13. }
  14. public void setName(String name) {
  15. this.name = name;
  16. }
  17. public String getAge() {
  18. return age;
  19. }
  20. public void setAge(String age) {
  21. this.age = age;
  22. }
  23. }

04String常见构造方法

  1. package com.itheima.string;
  2. public class Demo1String {
  3. /*
  4. Java程序中, 所有的双引号字符串, 都是String这个类的对象
  5. 字符串是常量;它们的值在创建之后不能更改
  6. */
  7. public static void main(String[] args) {
  8. String s1 = "abc123";
  9. int length = s1.length();
  10. System.out.println(length);
  11. s1 = "def"; // 这一步是让s1这个字符串类型的变量, 记录了一个新的对象.
  12. System.out.println(s1);
  13. /*
  14. Student stu = new Student("张三",23);
  15. stu = new Student("李四",24);
  16. stu.setName("王五");
  17. */
  18. }
  19. }
  1. package com.itheima.string;
  2. public class Demo2StringConstructor {
  3. /*
  4. String类常见构造方法:
  5. public String() : 创建一个空白字符串对象,不含有任何内容
  6. public String(char[] chs) : 根据字符数组的内容,来创建字符串对象
  7. public String(String original) : 根据传入的字符串内容,来创建字符串对象
  8. String s = “abc”; 直接赋值的方式创建字符串对象,内容就是abc
  9. 注意:
  10. String这个类比较特殊, 打印其对象名的时候, 不会出现内存地址
  11. 而是该对象所记录的真实内容.
  12. 面向对象-继承, Object类
  13. */
  14. public static void main(String[] args) {
  15. // public String() : 创建一个空白字符串对象,不含有任何内容
  16. String s1 = new String();
  17. System.out.println(s1);
  18. // public String(char[] chs) : 根据字符数组的内容,来创建字符串对象
  19. char[] chs = {'a','b','c'};
  20. String s2 = new String(chs);
  21. System.out.println(s2);
  22. // public String(String original) : 根据传入的字符串内容,来创建字符串对象
  23. String s3 = new String("123");
  24. System.out.println(s3);
  25. }
  26. }

05创建字符串对象的区别对比

06String特点-常见面试题

字符串常量池

07字符串的比较

08用户登录案例

  1. package com.itheima.test;
  2. import java.util.Scanner;
  3. public class Test1 {
  4. /*
  5. 需求:已知用户名和密码,请用程序实现模拟用户登录。
  6. 总共给三次机会,登录之后,给出相应的提示
  7. 思路:
  8. 1. 已知用户名和密码,定义两个字符串表示即可
  9. 2. 键盘录入要登录的用户名和密码,用 Scanner 实现
  10. 3. 拿键盘录入的用户名、密码和已知的用户名、密码进行比较,给出相应的提示。
  11. 字符串的内容比较,用equals() 方法实现
  12. 4. 用循环实现多次机会,这里的次数明确,采用for循环实现,并在登录成功的时候,使用break结束循环
  13. */
  14. public static void main(String[] args) {
  15. // 1. 已知用户名和密码,定义两个字符串表示即可
  16. String username = "admin";
  17. String password = "123456";
  18. // 2. 键盘录入要登录的用户名和密码,用 Scanner 实现
  19. Scanner sc = new Scanner(System.in);
  20. // 4. 用循环实现多次机会,这里的次数明确,采用for循环实现
  21. for(int i = 1; i <= 3; i++){
  22. System.out.println("请输入用户名:");
  23. String scUsername = sc.nextLine();
  24. System.out.println("请输入密码:");
  25. String scPassword = sc.nextLine();
  26. // 3. 拿键盘录入的用户名、密码和已知的用户名、密码进行比较,给出相应的提示。
  27. if(username.equals(scUsername) && password.equals(scPassword)){
  28. System.out.println("登录成功");
  29. break;
  30. }else{
  31. if(i == 3){
  32. System.out.println("您的登录次数已达到今日上限, 请明天再来");
  33. }else{
  34. System.out.println("登录失败,您还剩余" + (3-i) +"次机会");
  35. }
  36. }
  37. }
  38. }
  39. }

09字符串的遍历

  1. package com.itheima.test;
  2. import java.util.Scanner;
  3. public class Test3 {
  4. /*
  5. 需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串
  6. 思路:
  7. 1. 键盘录入一个字符串,用 Scanner 实现
  8. 2. 将字符串拆分为字符数组
  9. public char[] toCharArray( ):将当前字符串拆分为字符数组并返回
  10. 3. 遍历字符数组
  11. */
  12. public static void main(String[] args) {
  13. // 1. 键盘录入一个字符串,用 Scanner 实现
  14. Scanner sc = new Scanner(System.in);
  15. System.out.println("请输入:");
  16. String s = sc.nextLine();
  17. // 2. 将字符串拆分为字符数组
  18. char[] chars = s.toCharArray();
  19. // 3. 遍历字符数组
  20. for (int i = 0; i < chars.length; i++) {
  21. System.out.println(chars[i]);
  22. }
  23. }
  24. }

10统计字符次数

  1. package com.itheima.test;
  2. import java.util.Scanner;
  3. public class Test2 {
  4. /*
  5. 需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串
  6. 思路:
  7. 1. 键盘录入一个字符串,用 Scanner 实现
  8. 2. 遍历字符串,首先要能够获取到字符串中的每一个字符
  9. public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的
  10. 3. 遍历字符串,其次要能够获取到字符串的长度
  11. public int length():返回此字符串的长度
  12. 4. 遍历打印
  13. 9
  14. */
  15. public static void main(String[] args) {
  16. // 1. 键盘录入一个字符串,用 Scanner 实现
  17. Scanner sc = new Scanner(System.in);
  18. System.out.println("请输入:");
  19. String s = sc.nextLine();
  20. // 2. 遍历字符串,首先要能够获取到字符串中的每一个字符
  21. for(int i = 0; i < s.length(); i++){
  22. // i : 字符串的每一个索引
  23. char c = s.charAt(i);
  24. System.out.println(c);
  25. }
  26. }
  27. }
  1. import java.util.Scanner;
  2. public class Test4 {
  3. /*
  4. 需求:键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)
  5. 思路:
  6. 1. 键盘录入一个字符串,用 Scanner 实现
  7. 2. 要统计三种类型的字符个数,需定义三个统计变量,初始值都为0
  8. 3. 遍历字符串,得到每一个字符
  9. 4. 判断该字符属于哪种类型,然后对应类型的统计变量+1
  10. 假如ch是一个字符,我要判断它属于大写字母,小写字母,还是数字,直接判断该字符是否在对应的范围即可
  11. 大写字母:ch>='A' && ch<='Z'
  12. 小写字母: ch>='a' && ch<='z'
  13. 数字: ch>='0' && ch<='9'
  14. 5. 输出三种类型的字符个数
  15. */
  16. public static void main(String[] args) {
  17. // 1. 键盘录入一个字符串,用 Scanner 实现
  18. Scanner sc = new Scanner(System.in);
  19. System.out.println("请输入:");
  20. String s = sc.nextLine();
  21. // 2. 要统计三种类型的字符个数,需定义三个统计变量,初始值都为0
  22. int bigCount = 0;
  23. int smallCount = 0;
  24. int numCount = 0;
  25. // 3. 遍历字符串,得到每一个字符
  26. char[] chars = s.toCharArray();
  27. for (int i = 0; i < chars.length; i++) {
  28. char c = chars[i];
  29. // 4. 判断该字符属于哪种类型,然后对应类型的统计变量+1
  30. if(c >= 'A' && c <= 'Z'){
  31. bigCount++;
  32. }else if(c >= 'a' && c <= 'z'){
  33. smallCount++;
  34. }else if(c >= '0' && c <= '9'){
  35. numCount++;
  36. }
  37. }
  38. // 5. 输出三种类型的字符个数
  39. System.out.println("大写字母字符:" + bigCount);
  40. System.out.println("小写字母字符:" + smallCount);
  41. System.out.println("数字字母字符:" + numCount);
  42. }
  43. }

11手机号屏蔽-字符串截取

  1. package com.itheima.test;
  2. import java.util.Scanner;
  3. public class Test5 {
  4. /*
  5. 需求:以字符串的形式从键盘接受一个手机号,将中间四位号码屏蔽
  6. 最终效果为:156****1234
  7. 思路:
  8. 1. 键盘录入一个字符串,用 Scanner 实现
  9. 2. 截取字符串前三位
  10. 3. 截取字符串后四位
  11. 4. 将截取后的两个字符串,中间加上****进行拼接,输出结果
  12. */
  13. public static void main(String[] args) {
  14. // 1. 键盘录入一个字符串,用 Scanner 实现
  15. Scanner sc = new Scanner(System.in);
  16. System.out.println("请输入手机号:");
  17. String telString = sc.nextLine();
  18. // 2. 截取字符串前三位
  19. String start = telString.substring(0,3);
  20. // 3. 截取字符串后四位
  21. String end = telString.substring(7);
  22. // 4. 将截取后的两个字符串,中间加上****进行拼接,输出结果
  23. System.out.println(start + "****" + end);
  24. }
  25. }

12敏感词替换-字符串替换

  1. import java.util.Scanner;
  2. public class Test6 {
  3. /*
  4. 需求:键盘录入一个 字符串,如果字符串中包含(TMD),则使用***替换
  5. 思路:
  6. 1. 键盘录入一个字符串,用 Scanner 实现
  7. 2. 替换敏感词
  8. String replace(CharSequence target, CharSequence replacement)
  9. 将当前字符串中的target内容,使用replacement进行替换,返回新的字符串
  10. 3. 输出结果
  11. */
  12. public static void main(String[] args) {
  13. // 1. 键盘录入一个字符串,用 Scanner 实现
  14. Scanner sc = new Scanner(System.in);
  15. System.out.println("请输入:");
  16. String s = sc.nextLine();
  17. // 2. 替换敏感词
  18. String result = s.replace("TMD","***");
  19. // 3. 输出结果
  20. System.out.println(result);
  21. }
  22. }

13切割字符串

  1. package com.itheima.test;
  2. import com.itheima.domain.Student;
  3. import java.util.Scanner;
  4. public class Test7 {
  5. /*
  6. 需求:以字符串的形式从键盘录入学生信息,例如:“张三 , 23”
  7. 从该字符串中切割出有效数据,封装为Student学生对象
  8. 思路:
  9. 1. 编写Student类,用于封装数据
  10. 2. 键盘录入一个字符串,用 Scanner 实现
  11. 3. 根据逗号切割字符串,得到(张三)(23)
  12. String[] split(String regex) :根据传入的字符串作为规则进行切割
  13. 将切割后的内容存入字符串数组中,并将字符串数组返回
  14. 4. 从得到的字符串数组中取出元素内容,通过Student类的有参构造方法封装为对象
  15. 5. 调用对象getXxx方法,取出数据并打印。
  16. */
  17. public static void main(String[] args) {
  18. // 2. 键盘录入一个字符串,用 Scanner 实现
  19. Scanner sc = new Scanner(System.in);
  20. System.out.println("请输入学生信息:");
  21. String stuInfo = sc.nextLine();
  22. // stuInfo = "张三,23";
  23. // 3. 根据逗号切割字符串,得到(张三)(23)
  24. String[] sArr = stuInfo.split(",");
  25. // System.out.println(sArr[0]);
  26. // System.out.println(sArr[1]);
  27. // 4. 从得到的字符串数组中取出元素内容,通过Student类的有参构造方法封装为对象
  28. Student stu = new Student(sArr[0],sArr[1]);
  29. // 5. 调用对象getXxx方法,取出数据并打印。
  30. System.out.println(stu.getName() + "..." + stu.getAge());
  31. }
  32. }

14String方法小结

  1. package com.itheima.stringmethod;
  2. public class Demo1Equals {
  3. public static void main(String[] args) {
  4. String s1 = "abc";
  5. String s2 = "ABC";
  6. String s3 = "abc";
  7. // equals : 比较字符串内容, 区分大小写
  8. System.out.println(s1.equals(s2));
  9. System.out.println(s1.equals(s3));
  10. // equalsIgnoreCase : 比较字符串内容, 忽略大小写
  11. System.out.println(s1.equalsIgnoreCase(s2));
  12. }
  13. }
  1. package com.itheima.stringmethod;
  2. public class Demo2Substring {
  3. /*
  4. 截取字符串:
  5. String substring(int beginIndex) :
  6. 从传入的索引位置处,向后截取,一直截取到末尾,得到新的字符串并返回
  7. String substring(int beginIndex, int endIndex) :
  8. 从beginIndex索引位置开始截取,截取到endIndex索引位置,得到新字符串并返回(包含头,不包含尾)
  9. */
  10. public static void main(String[] args) {
  11. String s = "itheima";
  12. String ss = s.substring(2);
  13. System.out.println(ss);
  14. String sss = s.substring(0,2);
  15. System.out.println(sss);
  16. }
  17. }

15StringBuilder概述

16StringBuilder构造方法

  1. package com.itheima.stringbuilder;
  2. public class Demo2StringBuilder {
  3. /*
  4. StringBuilder : 可变的字符串, 可以看作为是一个容器
  5. 构造方法:
  6. public StringBuilder() : 创建一个空白可变字符串对象,不含有任何内容
  7. public StringBuilder(String str) : 根据字符串的内容,来创建可变字符串对象
  8. */
  9. public static void main(String[] args) {
  10. // public StringBuilder() : 创建一个空白可变字符串对象,不含有任何内容
  11. StringBuilder sb = new StringBuilder();
  12. System.out.println(sb);
  13. // public StringBuilder(String str) : 根据字符串的内容,来创建可变字符串对象
  14. StringBuilder sb2 = new StringBuilder("abc");
  15. System.out.println(sb2);
  16. }
  17. }

17StringBuilder常用的成员方法

  1. package com.itheima.stringbuilder;
  2. public class Demo1StringBuilder {
  3. public static void main(String[] args) {
  4. // 264
  5. long start = System.currentTimeMillis();
  6. StringBuilder sb = new StringBuilder();
  7. for(int i = 1; i <= 50000; i++){
  8. sb.append(i);
  9. }
  10. System.out.println(sb);
  11. long end = System.currentTimeMillis();
  12. System.out.println(end - start);
  13. }
  14. public static void method() {
  15. // 2939
  16. long start = System.currentTimeMillis(); // 获取1970年1月1日 0时0分0秒 到当前时间所经历过的毫秒值
  17. String s = "";
  18. for(int i = 1; i <= 50000; i++){
  19. s += i;
  20. }
  21. System.out.println(s);
  22. long end = System.currentTimeMillis();
  23. System.out.println(end - start);
  24. }
  25. }
  1. package com.itheima.stringbuilder;
  2. public class Demo3StringBuilder {
  3. /*
  4. 成员方法:
  5. public StringBuilder append(任意类型) : 添加数据,并返回对象本身
  6. public StringBuilder reverse() : 返回相反的字符序列
  7. public int length() : 返回长度 (字符出现的个数)
  8. public String toString() : 通过toString()就可以实现把StringBuilder转换为String
  9. */
  10. public static void main(String[] args) {
  11. StringBuilder sb = new StringBuilder();
  12. // sb.append("红色");
  13. // System.out.println(sb);
  14. // sb.append("蓝色");
  15. // System.out.println(sb);
  16. // sb.append("绿色");
  17. // System.out.println(sb);
  18. // StringBuilder sb2 = sb.append("红色");
  19. // StringBuilder sb3 = sb2.append("蓝色");
  20. // sb3.append("绿色");
  21. // 链式编程: 如果一个方法返回的是对象类型, 对象就可以继续向下调用方法.
  22. sb.append("红色").append("蓝色").append("绿色");
  23. System.out.println("反转前:" + sb);
  24. sb.reverse();
  25. System.out.println("反转后:" + sb);
  26. System.out.println("sb中字符的个数为:" + sb.length());
  27. // public String toString() : 通过toString()就可以实现把StringBuilder转换为String
  28. String s = sb.toString();
  29. System.out.println(s);
  30. }
  31. }

18StringBuilder提高效率的原理

19对称字符串案例

  1. package com.itheima.test;
  2. import java.util.Scanner;
  3. public class Test8 {
  4. /*
  5. 需求:键盘接受一个字符串,程序判断出该字符串是否是对称字符串,并在控制台打印是或不是
  6. 对称字符串:123321、111
  7. 非对称字符串:123123
  8. 思路:
  9. 1. 键盘录入一个字符串,用 Scanner 实现
  10. 2. 将键盘录入的字符串反转
  11. 3. 使用反转后的字符串,和原字符串进行比对
  12. 4. 如果相同,则输出是对称字符串,反之输出不是对称字符串
  13. */
  14. public static void main(String[] args) {
  15. // 1. 键盘录入一个字符串,用 Scanner 实现
  16. Scanner sc = new Scanner(System.in);
  17. System.out.println("请输入对称字符串:");
  18. String s = sc.nextLine();
  19. // 2. 将键盘录入的字符串反转
  20. // 将字符串封装为StringBuilder对象, 目的是为了掉用其反转的方法
  21. StringBuilder sb = new StringBuilder(s);
  22. sb.reverse();
  23. String reverseStr = sb.toString();
  24. // s : String
  25. // sb : StringBuilder
  26. // 3. 使用反转后的字符串,和原字符串进行比对
  27. if(s.equals(reverseStr)){
  28. System.out.println("是对称字符串");
  29. }else{
  30. System.out.println("不是对称字符串");
  31. }
  32. }
  33. }

20StringBuilder拼接字符串案例

  1. package com.itheima.test;
  2. public class Test9 {
  3. /*
  4. 需求:定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回
  5. 调用该方法,并在控制台输出结果。
  6. 例如,数组为int[] arr = {1,2,3};
  7. 执行方法后的输出结果为:[1, 2, 3]
  8. 思路:
  9. 1. 定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
  10. 2. 定义一个方法,返回值类型 String,参数列表 int[] arr
  11. 3. 在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回
  12. 4. 调用方法,用一个变量接收结果
  13. 5. 输出结果
  14. */
  15. public static void main(String[] args) {
  16. // 1. 定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
  17. int[] arr = {1,2,3};
  18. // 4. 调用方法,用一个变量接收结果
  19. String s = arrayToString(arr);
  20. // 5. 输出结果
  21. System.out.println(s);
  22. }
  23. // 2. 定义一个方法,返回值类型 String,参数列表 int[] arr
  24. public static String arrayToString(int[] arr){
  25. // 3. 在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回
  26. StringBuilder sb = new StringBuilder("[");
  27. for (int i = 0; i < arr.length; i++) {
  28. if(i == arr.length -1){
  29. sb.append(arr[i]).append("]");
  30. }else{
  31. sb.append(arr[i]).append(", ");
  32. }
  33. }
  34. return sb.toString();
  35. }
  36. }