Java学习笔记(8)

API&字符串

API

字符串

创建string对象

字符串的内存管理

串池:字符串常量池,只有直接赋值方式的字符串才存到这里,new出来的字符串不在

复用相同的地址(节约内存)

有new就是在堆内存中开辟了新的空间,使用不同的地址(可能会浪费内存)

String比较

==?比较

注意有没有new,存的可能是地址

直接赋值字符串(那就是在串池里),如果内容相同,则会复用一样的地址

所以==号出来,结果是true

Equals

键盘录入的字符串是new出来的(源码写的)

Ctrl+alt+t:快捷键包裹一段代码,并用if、for、while包裹

package exercise;

import java.util.Scanner;

public class exercise2 {
    public static void main(String[] args) {
        String rightUsername = "zhangsan";
        String rightPassword = "123456";

        Scanner sc = new Scanner(System.in);

        int chance = 3;
        for (int i = 0; i < chance; i++) {

            System.out.println("请输入用户名:");
            String username = sc.next();
            System.out.println("请输入密码:");
            String password = sc.next();

            boolean flag1 = username.equals(rightUsername);
            boolean flag2 = password.equals(rightPassword);

            if (flag1 && flag2) {
                System.out.println("登录成功!");
                break;
            } else {
                if (i == chance - 1) {
                    System.out.println("账号"+username + "将被锁定!");
                }else {
                System.out.println("登录失败,用户名或密码错误!还剩下" + (chance - i - 1) + "次机会");
                }
            }
        }

    }
}

遍历字符串 charAt

统计大小写和数字

记得char字符的比较是转化为ASCII码来进行比较的

拼接字符串

package exercise;

public class exercise4 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 99999, 23};
        String str = arrToString(arr);
        System.out.println(str);
    }

    public static String arrToString(int[] arr) {
        if (arr == null) {
            return "";
        }

        if (arr.length == 0) {
            return "[]";
        }

        String str = "[";
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                str = str + arr[i] + "]";
            } else {
                str = str + arr[i] + ", ";
            }
        }

        return str;

    }
}

字符串反转

Shift + f6: 批量修改,像是for里面的形参

package exercise;

import java.util.Scanner;

public class exercise5 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String str = sc.next();
        String reverseStr = reverse(str);
        System.out.println(reverseStr);
    }

    public static String reverse(String str) {
        String result = "";
        for (int i = str.length() - 1; i >= 0; i--) {
            char c = str.charAt(i);
            result = result + c;
        }
        return result;
    }
}

查表法

package exercise;

import java.util.Scanner;

public class exercise6 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int money;
        while (true) {
            System.out.println("输入金额:");
            money = sc.nextInt();
            if (money >= 0 && money <= 9999999) {
                break;
            } else {
                System.out.println("无效金额!");
            }
        }

        String moneyStr = "";
        while (true) {
            int ge = money % 10;
            String CapitalNumber = getCapitalNumber(ge);
            moneyStr = CapitalNumber + moneyStr;

            money /= 10;
            if (money == 0) {
                break;
            }

        }

        int count = 7 - moneyStr.length();
        for (int i = 0; i < count; i++) {
            moneyStr = "零" + moneyStr;
        }

        String[] arr = {"佰","拾","万","仟","佰","拾","元"};
        String result = "";
        for (int i = 0; i < moneyStr.length(); i++) {
            char c = moneyStr.charAt(i);
            result = result + c + arr[i];
        }

        System.out.println(result);
    }

    public static String getCapitalNumber(int number) {
        String[] arr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        return arr[number];
    }
}

截取字符串 substring

package exercise;

public class exercise7 {
    public static void main(String[] args) {
        String phoneNumber = "12345854125";
        String start = phoneNumber.substring(0,3);
        String end = phoneNumber.substring(7);
        String result = start + "****" + end ;
        System.out.println(result);
    }
}

package exercise;

public class exercise8 {
    public static void main(String[] args) {
        String id = "354862495157865234";
        String year = id.substring(6, 10);
        String month = id.substring(10, 12);
        String day = id.substring(12, 14);
        char gender = id.charAt(16);
        int num = gender - 48;

        String birth = "出生年月日:" + year + "年" + month + "月" + day + "日";
        String genderInfo = "";
        if (num % 2 == 1) {
            genderInfo = "男";
        }else {
            genderInfo = "女";
        }

        System.out.println(birth);
        System.out.println(genderInfo);

    }
}

字符串替换 replace

Stringbuilder 在字符串拼接,反转用到

用+号拼接字符串很慢,因为每次拼接都会在内存中产生一个新的字符串,占据内存

Append reverse tostring

直接打印空的stringbuilder ,是空值,而不是地址值

append 、reverse是在容器内部进行处理,是可以改变的,不需要新建一个变量接受结果,和字符串不一样。

package exercise;

import java.util.Scanner;

public class exercise9 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("input string:");
        String str = sc.next();

        String reverseStr = new StringBuilder(str).reverse().toString();
        if (str.equals(reverseStr)){
            System.out.println("是对称的!");
        }else {
            System.out.println("不是对称的!");
        }

    }
}

package exercise;

public class exercise10 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 1518, 1115};
        System.out.println(arrToString(arr));
    }

    public static String arrToString(int[] arr) {
        StringBuilder sb = new StringBuilder();

        sb.append("[");
        String result = "";
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                sb.append(arr[i]);
            } else {
                sb.append(arr[i]).append(", ");
            }
        }
        sb.append("]");

        return sb.toString();
    }
}

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值