大数据基础之java常用API一(Object类、String类、StringBuilder类)

举报
chad_chang 发表于 2022/10/26 17:00:21 2022/10/26
【摘要】 大数据基础之java常用API一(Object类、String类、StringBuilder类)

@toc


在这里插入图片描述

1. Object类

1.1 概述

Object类是所有类的父类, 所有的类都直接或者间接继承自Object类.

Object类: 是所有类的基类,或者说公共父类,每个类都直接或者间接的继承自Object,所以该类中有的方法,其他类中都有

1.2 构造方法

public Object() //Object类中只有一个空参构造.
所有类的构造方法中都会默认调用super() 会逐级调用直到调用到Object类为止.

1.3 成员方法:

public String toString(); 将对象转换为字符串时调用,可以打印指定内容,类似于Python中的__str__()
public boolean equals(Object obj); 对比两个对象的大小

注意:在开发中一般使用 == 比较是否为同一地址
会使用equals 比较两个对象是否为同一内容
例如: 在开发中 new Person(“小红”, 12); 与 new Person(“小兰”, 15); 不是同一对象
但是.在开发中 new Person(“小红”, 12); 与 new Person(“小红”, 12); 是同一对象

2. String类

2.1 概述

String代表字符串类, 即: 由多个字符组成的一串数据. 字符串的本质就是一个字符数组.

2.2 构造方法

 //1.构造方法
//   String name = new String(); // 此处为空字符串
char[] arrChar = {'a', 'b', 'c'};
String str1 = new String(arrChar);
System.out.println(str1);
String name = "jack"; // 字符串定义的语法糖 
System.out.println(name);
  1. toString

  2. equals

  3. equalsIgnoreCase

  4. charAt

  5. toCharArray

public static void main(String[] args) {
   String str1 = "abc";
    char[] arrChar = {'a', 'b', 'c'};
    String str2 = new String(arrChar);
    System.out.println(str1);
    System.out.println(str2);
   
     // equals: 比较两个字符串是否相等
       System.out.println(str1 == str2); // false 两个内容相同的字符串对象,地址不一定相同
       System.out.println(str1.equals(str2)); // true equals 比较的是两个字符串中的内容是否相同,所以Strign中一定重写了equals
   
       // equalsIgnoreCase: 比较两个字符串是否相等,忽略大小写
       String str3 = "aBc";
       System.out.println(str1.equals(str3)); // false
       System.out.println(str1.equalsIgnoreCase(str3)); // true 对比内容的时候忽略大小写
   
       // charAt: 可以获取指定位置的字符
       // 获取元素时,索引值从0开始,左至右依次递增.
       char char1 = str3.charAt(1);
       System.out.println(char1); // B
       // 能不能使用索引[]直接从字符串中取值???
       // System.out.println(str3[1]);
   
       // toCharArray: 将字符串拆解为字符数组
       char[] chars = str2.toCharArray();
       System.out.println("chars = " + Arrays.toString(chars));
   
       //探索: 在Python中常用的一些替换 拆分 等等功能在java存在么??
       String str4 = "hello world and java";
       // 字符串替换
       str4 = str4.replace("java", "bigdata");
       System.out.println(str4);
       // 根据分隔符拆分字符串
       String[] s1 = str4.split(" ");
       System.out.println(Arrays.toString(s1)); // [hello, world, and, bigdata]
       // toUpperCase将字符串准换为大写, toLowerCase 将字符串全部转换为小写
       String s2 = str4.toUpperCase();
       System.out.println(s2);
       
       //面试题: 获取字符串的长度怎么做?
       System.out.println(str4.length());
       // 获取数组的长度,怎么做??
       System.out.println(chars.length);
       // 结论: 获取字符串长度,使用的是length方法, 获取数组长度使用的是length属性
       
   }

2.3 String案例

2.3.1 模拟用户登录

public static void main(String[] args) {
        // 1. 定义两个变量,分别保存账号和密码信息
        String userName = "chad_chang";
        String passWord = "123456";
        // 6. 循环三次,每次获取循环的次数
        // 由于我们是循环指定的次数,所以此时我们选择for循环
        for (int i = 1; i <= 3; i++) {
            // 2. 让用户键入账号密码信息
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入您的账号:");
            String inputUserName = sc.nextLine();
            System.out.println("请输入您的密码:");
            String inputPassWord = sc.nextLine();
            // 3. 比对账号密码是否正确
            // 判断的是地址相同,这里的需求时判断数值是否相同,所以应该选择equals进行相等判断
//            if (userName == inputUserName && passWord == inputPassWord) {
            if (userName.equals(inputUserName) && passWord.equals(inputPassWord)) {
                // 4. 如果正确 提示 欢迎您
                System.out.println("您登录成功了!!!");
                // 如果输入账号密码正确,则跳出循环结束程序
                break;
            } else {
                // 5. 如果不正确 提示剩余次数(3-循环次数)
                System.out.println("输入错误,您还有" + (3 - i) + "次机会");
                if (3 - i == 0) {
                    // 7. 如果剩余循环次数为0 , 则提示您的账号已经被锁定
                    System.out.println("您已经三次输入错误,账号已经被锁定");
                }
            }
        }

    }

2.3.2 统计字符次数

 public static void main(String[] args) {
        // 键盘录入字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入随机的一个字符串:");
        String nextLine = sc.nextLine();
        // 可以更具ascii码的大小判断字符的类型
//        char a = 98;
//        System.out.println(a);
        //创建几个变量分别记录数字,大写字母,小写字母的数量
        int upperCharCount = 0;
        int lowerCharCount = 0;
        int numberCount = 0;
        // 遍历字符串(获取字符串中的每一个字符)
        for (int i = 0; i < nextLine.length(); i++) {
            char c1 = nextLine.charAt(i);
            // 根据数值的范围统计该类型字符出现的次数
            if (c1 >= 'a' && c1 <= 'z') {
                lowerCharCount++;
            } else if (c1 >= 'A' && c1 <= 'Z') {
                upperCharCount++;
            } else if (c1 >= '0' && c1 <= '9') {
                numberCount++;
            }
        }
        System.out.println("大写字母有:" + upperCharCount);
        System.out.println("小写字母有:" + lowerCharCount);
        System.out.println("数字字符有:" + numberCount);
    }

2.3.3 字符串反转

public static void main(String[] args) {
    // 1.获取用户键入的字符串信息
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入随机的一个字符串:");
    String nextLine = sc.nextLine();
    // 快速抽取方法的快捷键:ctrl + alt + m
    reverse(nextLine);
    // 思考:在python中直接使用reverse可以进行字符串反转,在java中有没有类似的方法呢??

}

private static void reverse(String nextLine) {
    //2.创建一个新的字符串用于保存反转后的结果
    String newString = "";
    // 遍历字符串(获取字符串中的每一个字符)
    for (int i = 0; i < nextLine.length(); i++) {
        // 获取每一次遍历得到的字符信息
        char c1 = nextLine.charAt(i);
        newString = c1 +  newString;
    }
    System.out.println(newString);
}

3. StringBuilder类

分析如下代码, 执行效率是高还是低呢?

String s = "hello";
s += "world";	
System.out.println(s);

解释:
如果字符串进行拼接操作, 每次拼接, 都会构建一个新的String对象, 即耗时, 又浪费内存空间. 而这种操作还不可避免,.那有没有一种比较好的方式来解决这个问题呢?
答案是肯定的, 我们可以通过Java提供的StringBuilder类来解决这个问题.

3.1 概述

StringBuilder类在java.lang包下, 无需导包, 可以直接使用.
StringBuilder是一个可变的字符序列, 也叫字符串缓冲区类.
我们可以把它看做一个容器, 这里的可变指的是StringBuilder对象中的内容是可变的
String和StringBuilder之间的区别
String: 内容是不可变的.
StringBuilder: 内容是可变的.

3.2 构造方法

public StringBuilder()
解释: 创建一个空白可变字符串对象, 它不含有任何内容.
public StringBuilder(String str)
解释: 根据字符串的内容, 来创建可变字符串对象.

  1. append

  2. reverse

  3. toString

public class Demo01 {
  public static void main(String[] args) {
      //StringBuilder对象的定义:
      StringBuilder sb1 = new StringBuilder();// 此时为空字符串
      System.out.println(sb1);
     StringBuilder sb2 = new StringBuilder("hello world!!!");
     StringBuilder sb3 = new StringBuilder("hello world!!!");
// 执行打印方法时,自动调用了toString();
// 此时证明StringBuilder类中重写了toString 方法,输出的是StringBuilder中保存的字符串信息
    System.out.println(sb2); // hello world!!!
    String string = sb2.toString();
  
          // append  给sb1添加字符信息
          // append 方法返回值就是当前的StringBuilder对象本身
          sb1.append(123);
          sb1.append("你好");
          // append 可以反复添加数据
          System.out.println(sb1);
          // 可以使用链式编程的方式进行调用
          sb1.append(123).append(456).append(678);
          System.out.println(sb1);
  
          // reverse 反转字符串
          // 在原有数据上进行了反转,产生新的数据
  //        sb2.reverse();
  //        System.out.println(sb2);
  
 // 拓展:
  // StringBuilder 中的equals没有重写, 还是去对比的两个对象的地址值是否相等
  System.out.println(sb2.equals(sb3)); // false
  
   }
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。