java自学DAY04

键盘录入的两套体系不能混用
 //键盘录入 第一套体系 
        // 遇到空格 制表符回车就停止接受 这些符合后面的数据就不会接受了
        //nextInt();接受整数
        //nextDouble();接受小数
        //next();接受字符串
        
        
        //第二套体系 
        // 可以接受空格,制表符,遇到回车才停止接受数据
        //nextLine();

先用nextInt,再用nextLine会导致下面的nextLine接受不到数据

String

1、==号比较

基本数据类型:比的是数据值

引用数据类型:比的是地址值

比较字符串对象的内容是否相等:equals

比较字符串对象的内容是否相等,忽略大小写:equalsIgnoreCase

案例金额转换

package Tests;

import java.util.Scanner;

public class test07 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int money;
        //1、输入数据
        while (true) {
            System.out.println("请输入一个数字:");
            money = sc.nextInt();
            if (money >= 0 && money <= 9999999) {
                break;
            } else {
                System.out.println("金额无效");
            }
        }
        //2、获得金额每个位数的数字
        String moneySr = "";
        while (money != 0) {
            int ge = money % 10;
            //moneySr+=getCapitalNumber(ge);
            moneySr = getCapitalNumber(ge) + moneySr;
            money = money / 10;
        }
        System.out.println(moneySr);
        //3、如果没有满7位数 添加零充位
        int count = 7 - moneySr.length();
        for (int i = 0; i < count; i++) {
            moneySr = "零" + moneySr;
        }
        System.out.println(moneySr);
        //4、添加单位
        String[] danwei = {"百", "十", "万", "千", "百", "十", "元"};
        String res = "";
        for (int i = 0; i < moneySr.length(); i++) {
            res = res + moneySr.charAt(i) + danwei[i];
        }
        System.out.println(res);


    }

    public static String getCapitalNumber(int number) {
        //定义数组 使得数字与大写的中文产生一个对应关系
        String[] arr = {"零", "一", "二", "三", "四", "五", "六", "七", "八"};
        return arr[number];

    }
}
StringBuilder

StringBuilder可以看成一个容器,创建之后里面的内容是可变的。

因为StringBuilder是java已经写好的类,java在底层对他做了一些处理,所以打印对象不是地址值而是属性值。

使用StringBuilder的场景:字符串的拼接和反转。

StringJoiner

和StringBuilder一样,可以看成一个容器,创建之后里面的内容是可变的。

可以提高字符串的操作效率,Jdk8出现的

StringJoiner构造方法
                       方法名                              说明
public StringJoiner(间隔符号)创建一个StringJoiner对象,指定拼接时的间隔符号
public StringJoiner(间隔符号,开始符号,结束符号)创建一个StringJoiner对象,指定拼接时的间隔符号、开始符号、结束符号

string、StringBuilder、StringJoiner总结

 字符串原理
字符串原理
字符串存储的内存原理

1、直接赋值会复用字符串常量池中的

2、new出来不会复用,而是开辟新空间

==号比较的到底是啥

1、基本数据类型比较数据值

2、引用数据类型比较地址值

字符串拼接的底层原理

1、如果没有变量参与,都是字符串直接相加,编译之后就是拼接之后的结果,会复用串池里的字符串。

2、如果有变量参与,每一行拼接的代码,都会在内存中创建新的字符串,浪费内存

StringBbuilder提高效率原理所以要拼接的内容都会往StringBuilder中放,不会创建很多无用的空间,节约内存。

 案例转换罗马数字

package Tests;

import java.util.Scanner;

public class test08 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个长度小于等于9且只有数字的字符串:");
        String str = sc.next();
        //判断是否满足要求
        while(true){
            if(checkStr(str)){
                //转换为罗马数字
                break;
            }else{
                System.out.println("输入的字符串不符合要求,请重新输入:");
                continue;
            }
        }
        //输出转换后的字符串
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            int number = c -48;
            sb.append( changeLuoma(number)).append(",");
        }
        String sbStr = sb.toString();
        System.out.println(sbStr);
    }
    public static boolean checkStr(String str){
        if(str.length()>9){
            return false;
        }
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if(c<'0'||c>'9'){
                return false;
            }
        }
        return true;
    }
    public static String changeLuoma(int number){
        String[] arr = {"","I","II","III","IV","V","VI","VII","VIII","IX"};
        return arr[number];
    }

}

 changeLuoma可以用switch实现,如下

package Tests;

import java.util.Scanner;

public class test08 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个长度小于等于9且只有数字的字符串:");
        String str = sc.next();
        //判断是否满足要求
        while(true){
            if(checkStr(str)){
                //转换为罗马数字
                break;
            }else{
                System.out.println("输入的字符串不符合要求,请重新输入:");
                continue;
            }
        }
        //输出转换后的字符串
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            //int number = c -48;
            sb.append( changeLuoma(c)).append(",");
        }
        String sbStr = sb.toString();
        System.out.println(sbStr);
    }
    public static boolean checkStr(String str){
        if(str.length()>9){
            return false;
        }
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if(c<'0'||c>'9'){
                return false;
            }
        }
        return true;
    }
    public static String changeLuoma(char number){
//        String[] arr = {"","I","II","III","IV","V","VI","VII","VIII","IX"};
//        return arr[number];
        String str;
        switch(number){
            case '0':
                str ="";
                break;
            case '1':
                str ="I";
                break;
            case '2':
                str ="II";
                break;
            case '3':
                str ="III";
                break;
            case '4':
                str ="IV";
                break;
            case '5':
                str ="V";
                break;
            case '6':
                str ="VI";
                break;
            case '7':
                str ="VII";
                break;
            case '8':
                str ="VIII";
                break;
            case '9':
                str ="IX";
                break;
            default:
                str= "";
                break;
        }
        return str;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值