[Java学习笔记]字符串(上)

目录

1.创建字符串的常见方式有哪些?

2.字符串在内存中的储存是怎么样的?

3.如何忽略大小比较字符串?:使用equalsIgnoreCase方法。

4.如何遍历字符串?:使用charAt方法。

5.练习:定义一个方法,把int数组中的数据按照指定格式拼接成字符串返回

6.练习:反转字符串:使用forr快速生成循环(i --)

7.练习:int类型的最高七位的 数据转化为中文收据形式

自己写的傻瓜版:

黑马程序员改进版:

一些小细节:

1.API:Appication Programming Interface 应用程序编程接口:别人已经写好的东西,不需要自己编写,拿来用即可

2.在使用Java.lang包(提供利用 Java 编程语言进行程序设计的基础类)中的类的时候,是不需要用import 导包的

3.帮助文档的快速使用:左上角显示-索引-输入框搜索想要的类即可


1.创建字符串的常见方式有哪些?

public class demo1 {
    public static void main(String[] args) {
        //直接赋值
        String str1="gaga";

        //根据字符数组创建新的字符串对象
        char[] chars={'H','e','l','l','o'};
        String str2=new String(chars);
        System.out.println("输出由char类型的数组创建出来的字符串:"+str2);
        System.out.println("输出数组与字符串的拼接:"+chars);
        System.out.print("直接输出数组:");
        System.out.println(chars);//这个也是输出字符串

        //创建字节数组,根据字节数组的内容创建字符串:根据ascii表把数字换成字符串
        //网络中传递信息都是使用字节信息,需要把字节信息进行转换变成字符串,就需要用到这个构造。
        byte[] bytes={97,98,99,100,101};
        String str3=new String(bytes);
        System.out.println("输出由byte类型数组创建出来的字符串"+str3);
    }
}

输出:


2.字符串在内存中的储存是怎么样的?

直接赋值的字符串存储在串池中:String Table——JDK7之后,串池就放在了堆内存中。
只要是直接赋值的字符串:如果说已经创建了一个相同的字符串,就不会再去创建新的字符串了!

new出来的数据存储在堆中(串池外)。

public class demo2 {
    public static void main(String[] args) {
        //以下两个变量是同一个地址
        String str1="abc";
        String str2="abc";
        System.out.println("直接赋值的字符串如果数据相同,则地址也相同:"+(str1==str2));//==号比较的是地址
        String str3="abcd";
        String str4=new String("abcd");//new 出来的字符串对象不会存储在串池中
        System.out.println("字符串中,new出来的数据地址与直接赋值的数据如果一样,地址不会相同:"+(str3==str4));
    }
}

输出:


3.如何忽略大小比较字符串?:使用equalsIgnoreCase方法。

public class demo3 {
    public static void main(String[] args) {
        String s1="ABCDEFG";
        System.out.println("abcdefg".equalsIgnoreCase(s1));
    }
}


4.如何遍历字符串?:使用charAt方法。

public class demo4 {
    public static void main(String[] args) {
        String str=new Scanner(System.in).next();
        for (int i = 0; i < str.length(); i++) {
            System.out.println(str.charAt(i));
        }
    }
}


5.练习:定义一个方法,把int数组中的数据按照指定格式拼接成字符串返回

//这里我感到疑惑的是,String是定长,如何一个个把数组中的数据加入到String中呢?
//这里使用的是字符串拼接--在串池中表现为创建新的字符串
public class demo5 {
    public static void main(String[] args) {
        int[] x={1,2,3,4,5,6,7,8,9};
        System.out.println(arrayToString(x));
    }
    public static String arrayToString(int[] x){
        if(x.length==0){
            return "[]";
        }else {
            String str="[";
            for (int i = 0; i < x.length-1; i++) {
                str+=x[i];
                str+=", ";
            }
            str+=x[x.length-1];
            str+="]";
            return str;
        }
    }
}


6.练习:反转字符串:使用forr快速生成循环(i --)

public class demo6 {
    public static void main(String[] args) {
        String str="123456789";
        System.out.println(StringReverse(str));
    }
    public static String StringReverse(String str){
        String str1="";
        for (int i = str.length()-1; i >= 0; i--) {//这里可以用str.length.forr快速生成
            str1+=str.charAt(i);
        }
        return str1;
    }
}

7.练习:int类型的最高七位的 数据转化为中文收据形式

自己写的傻瓜版:
public class demo7 {
    public static void main(String[] args) {
        int money = 1234567;
        String str="";
        int number = money % 10;
        money /= 10;
        str=numberToChinese(number)+"元"+str;
        number = money % 10;
        money /= 10;
        str=numberToChinese(number)+"拾"+str;
        number = money % 10;
        money /= 10;
        str=numberToChinese(number)+"百"+str;
        number = money % 10;
        money /= 10;
        str=numberToChinese(number)+"仟"+str;
        number = money % 10;
        money /= 10;
        str=numberToChinese(number)+"万"+str;
        number = money % 10;
        money /= 10;
        str=numberToChinese(number)+"拾"+str;
        number = money % 10;
        money /= 10;
        str=numberToChinese(number)+"佰"+str;
        System.out.println(str);
    }
    public static String numberToChinese(int number) {
        switch (number) {
            case 0 -> {
                return "零";
            }
            case 1 -> {
                return "壹";
            }
            case 2 ->{
                return "贰";
            }
            case 3 ->{
                return "叁";
            }
            case 4 ->{
                return "肆";
            }
            case 5 ->{
                return "伍";
            }
            case 6 ->{
                return "陆";
            }
            case 7 ->{
                return "柒";
            }
            case 8 ->{
                return "捌";
            }
            case 9 ->{
                return "玖";
            }
            default -> {
                System.out.println("传错数辣");
                return null;
            }
        }
    }
}
黑马程序员改进版:
public class demo8 {
    public static void main(String[] args) {
        int money = 123456;
        String str="";
        int number;
        //这里是把数据先全部提取出来,再处理数据格式
        while (money!=0){
            number = money % 10;
            money /= 10;
            str=numberToChinese(number)+str;
        }
        while (str.length()!=7){
            //补齐七位
            str="零"+str;
        }
        //添加单位,这里使用数组更加方便,要学习这种把数据存储在数组中的思想,方便修改
        String[] arr={"佰","拾","万","仟","佰","拾","元"};
        String answer="";
        for (int i = 0; i < str.length(); i++) {
            answer+=str.charAt(i);
            answer+=arr[i];
        }
        System.out.println(answer);
    }
    public static String numberToChinese(int number) {
        //这里我原本用的switch,太过于繁杂
        String arr[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
        return arr[number];
    }
}

输出:


一些小细节:

1.API:Appication Programming Interface 应用程序编程接口:别人已经写好的东西,不需要自己编写,拿来用即可

2.在使用Java.lang包(提供利用 Java 编程语言进行程序设计的基础类)中的类的时候,是不需要用import 导包的

3.帮助文档的快速使用:左上角显示-索引-输入框搜索想要的类即可

最后的小啰嗦:很长一段时间没更了,在福州和朋友玩了六天,然后回家独居(好像摆了两天。。。),昨天本来想开工的,大拇指被热油烫伤了(我再也不做油炸食品了),而且对锅铲有了一种恐惧感。。。。。。这几天真是把独居能犯的错误都犯了(忘带钥匙找师傅开锁什么的)。

正式重启Java之路!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值