常用类02(二)

课程笔记Day13

  • 字符串类 String
  • 字符串加强类 StringBuilder
  • 大数据类 BigDecimal
  • 数据格式化 NumberFormat
  • 枚举

第一章 字符串类 String

第01节 基础理论

关于String类,他是字符串,相当于将多个字符串联在一起。

需要注意的是字符串底层是 final char value[] 因此他的底层是不可以改变了。

如果你感觉字符串,底层发生了变化,那么他一定是创建了一个新的字符串数据。

在这里插入图片描述

第02节 构造方法

介绍

获取对象的方式,主要有四种,我们称之为 4+1 也就是 四种构造方法 和 一种直接赋值的方式

方法实例说明
String()String s1 = new String();无参构造
String(byte[])String s2 = new String(new byte[]{65,66,67});字节数组转字符串
String(char[])String s3 = new String(new char[]{‘A’,‘B’,‘C’});字符数组转字符串
String(String)String s4 = new String(“ABC”);字符串包装构造

不过我们一般推荐采用直接赋值的方式,格式如下:

String name = "hello";

字符串的内存图
在这里插入图片描述

第03节 常用方法

一、基础方法

方法API方法介绍
public int length()获取到字符串的长度,也就是字符串当中字符的个数
public char charAt(int)通过索引,获取到对应位置的字符
public char[] toCharArray()将字符串,转换成为字符数组

二、比较方法

方法API方法介绍
public boolean equals(Object)判断字符串是否相等(完全相等)
public boolean equalsIgnoreCase(String)判断字符串是否相等(忽略大小写)
public boolean startsWith(String)判断字符串是否以指定的字符串开头
public boolean endsWith(String)判断字符串是否以指定的字符串结尾

三、获取新字符串

方法API方法介绍
public String toLowerCase()字符串全部转换成为小写
public String toUpperCase()字符串全部转换成为大写
public String substring(int)字符串截取,从索引到末尾
public String substring(int,int)字符串截取,包括开头,不包括结尾
public String concat(String)字符串合并,合并成为新的字符串
public String trim()字符串去空格,消除前后空格
public String replace(CharSequence,CharSequence)字符串替换,替换后成为新的字符串

四、字符串转换其他

方法API方法介绍
public int indexOf(int)从前往后,获取字符(int->char),第一次出现的索引位置
public int indexOf(String)从前往后,获取字符串,第一次出现的索引位置
public int lastIndexOf(int)从后往前,获取字符(int->char),第一次出现的索引位置
public int lastIndexOf(String)从后往前,获取字符串,第一次出现的索引位置
public String[] split(String)根据指定的字符串,分割字符串,成为多段,变成字符串数组

注意细节: 采用 String[] split(String) 分隔符如果是 . 则需要使用 \\.

第04节 统计字符
import java.util.Scanner;

//练习:键盘录入一个字符串,获取到各类字符有多少个?
// ABCabc1234!@
//大写字母 3个
//小写字母 3个
//数字字符 4个
//其他字符 2个
public class Test10 {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串:");
        String str = sc.nextLine();
        //得到字符数组
        char[] array = str.toCharArray();
        //定义统计变量
        int countBig = 0;
        int countSmall = 0;
        int countNumber = 0;
        int countOther = 0;

        for (int i = 0; i < array.length; i++) {
            //遍历,得到单独的字符
            char c = array[i];
            if (c>='A' && c<='Z'){   //大写字母
                countBig++;
            }else if (c>='a' && c<= 'z'){  //小写字母
                countSmall++;
            }else if (c>='0' && c<= '9'){  //数字字符
                countNumber++;
            }else{
                countOther++;
            }
        }
        System.out.println("countBig = " + countBig);
        System.out.println("countSmall = " + countSmall);
        System.out.println("countNumber = " + countNumber);
        System.out.println("countOther = " + countOther);
    }
}

第二章 字符串加强类 StringBuilder

第01节 基础理论

字符串的加强类主要包含两个,分别是:

  • StringBuilder
  • StringBuffer

这两个字符串的加强类,构造方法和成员方法都相似,相比之下有什么区别呢?

StringBuffer 他是线程安全的,安全性高,但是效率偏低。

虽然 StringBuilder 的安全性不高,但是效率高,我们更加推荐使用 StringBuilder

回顾前面介绍的字符串的内存图。在字符串的内存图当中,进行字符串的拼接操作的时候,我们发现会产生内存垃圾。

而 StringBuilder 和 StringBuffer 他们两个设计出来,最主要的作用,就是用来做字符串的拼接。

第02节 常用方法

构造方法

方法API方法说明
public StringBuilder()无参数构造,使用较多
public StringBuilder(String)带参数构造,将字符串String转化成为StringBuilder

成员方法

方法API方法说明
StringBuilder append(任意数据类型)可以进行数据的追加
StringBuilder reverse()将字符串,进行反转,之前是 abcd 反转变成 dcba
String toString()可以将 StringBuilder 转换成为 String

相互转换

字符串和StringBuilder之间的相互转换。目的:为了使用彼此的功能

1. 字符串 String ---> 字符串增强类 StringBuilder
	String ss = "hello";
	StringBuilder sb = new StringBuilder(ss);  //采用构造方法,将字符串作为构造方法参数传入

2. 字符串增强类 StringBuilder ---> 字符串 String
	StringBuilder sb = new StringBuilder();
	sb.append("hello").append(123);
	String ss = sb.toString();   //直接使用 toString()方法
第03节 加强练习

需求

键盘输入一个字符串,判断是否是对称字符串。
例如:
	abc  不是对称字符串
	aba  他是对称字符串
	abba 他是对称字符串

代码

import java.util.Scanner;

//练习:判断是否是对称字符串
public class Test04 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串:");
        String strOld = sc.nextLine();
        //判断是否是对称字符串。
        //反转原始的字符串,得到新的字符串,拿新的字符串和原始字符串比较
        //如果相等,则表示是对称字符串,否则不是对称字符串。
        StringBuilder sb = new StringBuilder(strOld);
        String strNew = sb.reverse().toString();
        //采用三元运算符
        System.out.println(strOld.equals(strNew) ? "是对称字符串" : "不是对称字符串");
    }
}

第三章 大数据类 BigDecimal

第01节 基础理论

我们的double 数据在进行运算的过程当中,可能出现数据不精确的情况。这是由于 计算机二进制表示法不精确导致的。

但是有些场景当中,我们需要精确的运算,例如:银行、证券、炒股、科研。

这里就不能满足,因此需要精确计算,推荐大家采用新的类 BigDecimal

//学习 BigDecimal 的引入案例
public class Test01 {

    public static void main(String[] args) {

        System.out.println(0.1 + 0.2); //0.30000000000000004
    }
}
//发现问题:double类型,计算不精确
第02节 常用方法

构造方法

方法API方法说明
BigDecimal(double)将 double 类型的数据,转换成为 BigDecimal 的对象
BigDecimal(String)将 String 类型的数据,转换成为 BigDecimal 的对象

成员方法

方法API方法说明
public BigDecimal add(BigDecimal)加法运算
public BigDecimal subtract(BigDecimal)减法运算
public BigDecimal multiply(BigDecimal)乘法运算
public BigDecimal divide(BigDecimal)除法运算(整除方式)
public BigDecimal divide(BigDecimal,int,int)除法运算(存在无限循环)
第03节 基础练习

基础用法

//目标:学习BigDecimal 的加减乘除
public class Test03 {

    public static void main(String[] args) {

        BigDecimal bd1 = new BigDecimal("0.1");
        BigDecimal bd2 = new BigDecimal("0.2");

        //加法运算
        BigDecimal he = bd1.add(bd2);
        System.out.println("he = " + he); //he = 0.3

        //减法运算
        BigDecimal cha = bd1.subtract(bd2);
        System.out.println("cha = " + cha); //cha = -0.1

        //乘法运算
        BigDecimal ji = bd1.multiply(bd2);
        System.out.println("ji = " + ji); //ji = 0.02

        //除法运算
        BigDecimal shang = bd1.divide(bd2);
        System.out.println("shang = " + shang); //shang = 0.5
    }
}

//小结: 和add 差subtract 积multiply 商divide

无法整除的情况

import java.math.BigDecimal;

//目标:学习BigDecimal的 无法整除的情况
public class Test04 {

    public static void main(String[] args) {

        //创建对象
        BigDecimal bd2 = new BigDecimal("0.1");
        BigDecimal bd3 = new BigDecimal("0.3");

        //直接相除
        //三个参数:
        //参数1: 除数
        //参数2: 保留小数点后几位
        //参数3: 舍入模式  进一法ROUND_UP  去尾法ROUND_DOWN  四舍五入BigDecimal.ROUND_HALF_UP
        BigDecimal result = bd2.divide(bd3,4,BigDecimal.ROUND_HALF_UP);
        System.out.println("result = " + result);

    }
}
//小结: 如果无法整除,则会出现异常。杜绝异常,可以传入三个参数的方法

第四章 数字格式化 NumberFormat

第01节 基础理论

DecimalFormat 是关于数据操作的,格式化数据的类,他是 java.text.NumberFormat 的一个子类。

可以用于格式化 十进制的数字。他的作用有

  • 科学计数法表示(1.23E4)
  • 百分数表示 (12%)
  • 金额表示 ($123)
  • 定点数 (123.4)
  • 整数 (123)

使用格式

new DecimalFormat(String).format(数据);   //主要是这里的String 参数如何填写的问题。

格式化的效果

格式说明
new DecimalFormat(“0”).fromat(数据);获取一位整数
new DecimalFormat(“0.00”).fromat(数据);保留两位小数
new DecimalFormat(“00.000”).fromat(数据);获取两位整数,不够补零,保留三位小数
new DecimalFormat("#").fromat(数据);保留所有整数部分
new DecimalFormat("#.##%").fromat(数据);以百分比方式计数,并且获取两位小数
new DecimalFormat("#.###E0").fromat(数据);科学计数法,保留三位小数部分
new DecimalFormat(",###").fromat(数据);每三位以逗号分隔
第02节 案例代码
import java.text.DecimalFormat;
import java.text.NumberFormat;

//快速入门
public class Test01 {

    public static void main(String[] args) {

        //创建对象
        String patten = "####,####";
        NumberFormat nf = new DecimalFormat(patten);
        String text = nf.format(12345678);
        System.out.println("text = " + text);  //text = 1234,5678
    }
}
//小结:有什么作用呢? 可以便于阅读

第五章 枚举

第01节 基础理论

什么是枚举?

在前面讲解数据类型的时候,提到过: 数据类型分为基本数据类型和引用数据类型。
其中枚举就是 引用数据类型的一种。

男人和女人。这就是枚举。(就是可以穷举的,列出来的东西)
星期一、星期二、星期三、星期四、星期五、星期六、星期日  ---》 星期
春天、夏天、秋天、冬天  --》四季
金牌、银牌、铜牌 --》 奖牌
黑桃、红桃、梅花、方块 ---》花色

定义格式

enum  枚举类名称{
    枚举项1, 枚举项2, 枚举项3;
}

使用格式

枚举类名称.枚举项
第02节 快速入门

在这里插入图片描述

案例代码

枚举类

//扑克枚举类
public enum PuKe {

    //黑桃、红桃、梅花、方片
    HEITAO,HONGTAO,MEIHUA,FANGPIAN;

}

测试类

public class Test {

    public static void main(String[] args) {

        System.out.println(PuKe.HEITAO); //HEITAO
        System.out.println(PuKe.HONGTAO); //HONGTAO
    }
}
第03节 枚举本质

我们可以把枚举类,进行反编译,查看反编译之后,底层的代码实现。

反编译的快捷键: javap 类名称.class

在这里插入图片描述

第04节 应用场景

枚举他可以作用在 switch 语句当中。可以写在 switch语句的 小括号 上面。

回顾:在 switch 语句当中,switch 的小括号里面,可以写什么类型的数据呢?

1、byte

2、short

3、char

4、int

5、String

6、枚举 enum

枚举类

//扑克枚举类
public enum PuKe {

    //黑桃、红桃、梅花、方片
    HEITAO,HONGTAO,MEIHUA,FANGPIAN;

}

测试类

//枚举在 switch 语句当中的使用
public class Demo {

    public static void main(String[] args) {

        //创建对象 黑桃是PuKe的对象
        PuKe key = PuKe.FANGPIAN;

        switch (key) {
            case HEITAO:
                System.out.println("♠");
                break;
            case HONGTAO:
                System.out.println("♥");
                break;
            case MEIHUA:
                System.out.println("♣");
                break;
            case FANGPIAN:
                System.out.println("♦");
                break;
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值