一、今日重点

  • String
  • 比较字符串
  • 获取字符串长度
  • 获取指定位置下标的字符
  • 查找字符(串)位置
  • 截取字符(串)
  • 包装器类型(包装类,封装类)

二、进程概括

【√代表掌握了,-代表产生困惑但已解决,×代表没解决】
  • 比较String s1 = "abcdefg";与String s2 = new String("abcdefg");的区别【√】
  • equals方法比较字符串内容【√】
  • length方法获取字符串长度【√】
  • 查找字符串位置【√】
  • 练习:统计一个字符串在另一个字符串中出现的次数【√】
  • 截取字符串【√】
  • 练习:键盘上输入身份证号,获得性别,生日【√】
  • 转大写、小写、判断开头结尾、去空格、根据指定的字符分割【√】
  • 字符串的替换【√】
  • 字符串与数据类型转换【√】
  • 包装器类型(包装类,封装类)【√】
  • 异常【√】
  • 讲解昨天作业【√】

三、今日知识

  • String s1 = "abcdefg";

String既然是一个类,s1应该叫做String类的对象
类如果要创建对象,new,s1并没有new,s1也可以叫做对象

  • String s2 = new String("abcdefg");

s2是通过new创建出来的String类的对象
创建对象是要调用构造器

  • s1指向的abcdefg和s2指向的abcdefg不在同一个区域内
System.out.println(s1 == s2);
System.out.println(s2 == s3);
System.out.println(s1 == s4);

  • 双等号比较的是虚地址
  • 虚地址:对象在内存中的存储位置
  • new代表新建
  • =赋值,无论怎么比较,都是true
  • new赋值,用双等号比较,就是false
  • equals方法比较字符串内容

1.需要传参,传String类型的参数
2.有返回值是boolean类型
3.访问权限public

  • length方法获取字符串长度

1.不需要传参
2.有返回值,整型int
3.访问权限public

  • 面试题
  • 字符串获取长度的方法和数组获取长度有什么区别?

答:数组的length是属性,字符串的length()是方法

  • 获取指定位置下标的字符
String s1 = "abcdefg";
System.out.println(s1.charAt(0));
  • 查找字符串中字符位置
  • 判断指定字符串是否存在,返回值为字符串在s1的下标
  • 返回从左到右遇到的第一个匹配的下标
  • 如果不存在。返回-1
  • indexOf(String,int)代表从int位置开始查找,包括当前位置
String s1 = "abcdefgabcdaaa";
s1.indexOf('a');
System.out.println(s1.indexOf("a",8));
  • 从后往前查找
String s1 = "abcdefgabcdaaa";
s1.indexOf('a');      
System.out.println(s1.lastIndexOf("a",12));
  • 字符串的截取
  • 如果传一个参数,从指定位置开始截取,直到字符串的末尾
  • 包括起始位置的字符
  • 生成一个新的字符串,不会改变原有数据
String str = "abcdefghijklmn";
String s = str.substring(1);
System.out.println(s);
  • 传两个参数,包含起始位置,不包含终止位置
        String str = "abcdefghijklmn";
        s = str.substring(1,2);
        System.out.println(s);
  • 下面所有的方法都是返回一个新的字符串
  • 转大写

System.out.println(str.toUpperCase());

  • 转小写

System.out.println(str.toLowerCase());

  • 判断是否以xxxx开头、偏移两位

System.out.println(str.startsWith("a",2));

  • 判断是否以xxxx结尾

System.out.println(str.endsWith("F"));

  • 忽略大小写进行比较内容

System.out.println(str.equalsIgnoreCase(str1));

  • 去掉字符串前后的空格

System.out.println(str1.trim());

  • 根据指定的字符分割,分割之后,分割条件是消失
String str2 = "123,456,789,00";
String [] strings = str2.split(",");
System.out.println(Arrays.toString(strings));
  • 字符串的替换
        String str = "hello";
        System.out.println(str.replace('e', 'c'));
        System.out.println(str.replaceAll("l", "i"));
  • 字符串和其他数据类型的转换
int i = 10;
String s = String.valueOf(i);
  • 字符串和数组的转换
  • 数组转字符串
    int [] arr = new int[]{1,2,3,4,5};
  • 字符串转数组
  • 转成字符型数组

char[] array = str.toCharArray();

  • 转成字节型数组
    (一般情况下,字节型数组在操作文件的时候常用的IO流)

byte[] bytes = str.getBytes();

  • 包装器类型(包装类,封装类)

byte -- Byte
short -- Short
int -- Integer
long -- Long
float -- Float
double -- Double
char -- Character
boolean -- Boolean

  • 原理
  • 自动装箱:把int类型包装成了包装器Integer类型
    基本数据类型转换成对应的包装器类型

Integer i1 = 20;

  • 自动拆箱:把Integer类型转换int类型
    包装器类型转换成对应的基本数据类型

int ii = i2;

  • JDK5之后的新功能:
        1.自动装箱和自动拆箱
        2.增强for循环(foreach)
        3.枚举
  • JDK7以后的新功能:
    1.switch...case 可以用String
  • 异常

1.数组下标越界
2.内存溢出
3.空指针
4.字符串下标越界
5.数字格式化

四、练习汇总

  • 统计一个字符串在另一个字符串中出现的次数
  • 第一种(for循环
       for (int i = 0; i < s1.length(); i++) {
            if(s1.charAt(i) == target){
                count++;
            }
        }
        System.out.println(target + "在" + s1 + "中出现了" + count + "次!");
  • 第二种(while循环+面向对象·封装方法
    public int sum(String target,String str) {
        int count = 0;
        int i = 0;
        while(i < str.length()) {
            int i1 = str.indexOf(target,i);
            if(i1 != -1){
                count++;
                i = i1 + 1;
            } else {
                i++;
            }
        }
        return count;
    }
  • 键盘上输入身份证号,获得性别,生日。
public class Ch06_Demo {
    public String getGender(String cardId){
        String gender = "男";
        int genderNum =cardId.charAt(16);
        if(genderNum % 2 == 0){
            gender = "女";
        }
        return gender;
    }
    public String getBirthday(String cardId) {
        return cardId.substring(6, 14);
    }
    public static void main(String[] args) {
        Ch06_Demo c = new Ch06_Demo();
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入身份证号:");
        String cardId = sc.next();
        if(cardId.length() == 18) {
            System.out.println("身份证号为:" + cardId + ",生日:"
                    + c.getBirthday(cardId) + ",性别:" + c.getGender(cardId));
        }else{
            System.out.println("输入有误,请重新输入!");
        }
    }
}

五、学习心得

  1. 今天的新内容相对比较简单,是对字符串的各种操作,以及封装类。难度不高,只是需要记忆。
  2. 并且讲解了前一天的项目,通过讲解之前不理解的地方也都有了新的思路,老师的项目总是比我们的可读性更高,更容易看理解原理,减少了很多冗余。
  3. 加油,再接再厉。希望我们能沿着阶梯一步一步到达新的目的地。
posted on 2022-07-20 20:05  宝娟,我的嗓子!  阅读(69)  评论(0)    收藏  举报