当前位置: 首页 > news >正文

Java 学习笔记(基础篇9)

1. 综合练习

题目 1 :金额转换为中文大写格式

请编写一个 Java 程序,实现将数字金额转换为中文大写格式(带单位)的功能,具体要求如下:

(1) 程序接收用户输入的一个整数金额(范围:0-9999999),如果输入金额超出范围,提示 "金额无效" 并要求重新输入

(2) 转换规则:

  • 将数字转换为中文大写形式(零、壹、贰... 玖)
  • 为每一位数字添加对应的单位,单位顺序为:["佰","拾","万","仟","佰","拾","元"]
  • 不足 7 位的金额需要在高位补 "零",确保总长度为 7 位(例如 123 应补为 7 位:零零零零壹贰叁)

(3) 输出最终的中文大写金额字符串,示例如下:

  • 输入:123

  • 输出:零佰零拾零万零仟壹佰贰拾叁元

  • 输入:1000000

  • 输出:壹佰零拾零万零仟零佰零拾零元

public class test8 {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 (money != 0 ){int ge = money % 10;String capitalNumber = getCapitalNumber(ge);moneyStr = capitalNumber + moneyStr;  //不太理解money = money / 10;}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];}
}

关键逻辑:

① moneyStr = capitalNumber + moneyStr; 这种拼接方式相当于每次把新取到的高位数字放在前面,最终得到正确的顺序(从高位到低位)。

  • 这行代码的作用是将数字的大写形式按正确顺序拼接,解决了原代码中顺序颠倒的问题,举例说明:假设输入金额是 123
  • 第一次循环:取到个位 3capitalNumber是 "叁",moneyStr变为 "叁"
  • 第二次循环:取到十位 2capitalNumber是 "贰",moneyStr变为 "贰" + "叁" = "贰叁"
  • 第三次循环:取到百位 1capitalNumber是 "壹",moneyStr变为 "壹" + "贰叁" = "壹贰叁"

② 变量的作用域:

int money;
while (true) {System.out.println("请录入一个金额");money = sc.nextInt();  //不太理解,作用域问题if (money >= 0 && money <= 9999999){break;} else{System.out.println("金额无效");}
}
  • 在 Java 中,在循环内部声明的变量(如int money = ...,其作用域仅限于这个循环内部。
  • 当循环结束后,这个变量就会被销毁,循环外部的代码(如后续的数字转大写逻辑)无法再使用它,因此会出现找不到符号"money"的编译错误。

(2) 题目:手机号中间四位脱敏

请编写一个 Java 程序,实现对手机号的中间四位进行脱敏处理(替换为 * ),具体要求如下:

(1) 定义一个 11 位的手机号字符串(例如:"13528834382")。

(2) 截取手机号的前 3 位和后 4 位。

(3) 将前 3 位 + "****" + 后 4 位拼接,得到脱敏后的手机号。

(4) 输出脱敏结果。

示例:
输入(程序中定义):"13500004382"
输出:"135****4382"

public class test9 {public static void main(String[] args) {String phoneNumber = "13528834382";String start = phoneNumber.substring(0,3);String end = phoneNumber.substring(7);  //不太理解String result = start + "****" + end;System.out.println(result);}
}

关键逻辑:

① substring(int beginIndex, int endIndex)

(1) 作用:截取从 beginIndex(包含)到 endIndex(不包含)之间的子串,返回新字符串。

(2) 参数说明

  • beginIndex起始索引(包含此位置的字符)
  • endIndex结束索引(不包含此位置的字符),即截取范围是 [beginIndex, endIndex)

② substring(int beginIndex)

  • 作用:从字符串的 beginIndex(起始索引)位置开始,截取到字符串的末尾,返回一个新的子串。

2. StringBuilder

方法名说明
public StringBuilder()创建一个空白可变的字符串对象,不包含任何内容
public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象
public StringBuilder append(任意类型)添加数据,并返回对象本身
public StringBuilder reverse()反转容器中的内容
public int length()返回字符串长度
public String toString()通过 toString 可以把 StringBuilder 转化成 String

(1) 综合练习

编程题目:判断字符串是否为对称字符串

题目描述
请编写一个 Java 程序,实现判断用户输入的字符串是否为对称字符串(即回文串)。对称字符串是指从左到右读和从右到左读完全相同的字符串,例如 "abcba"、"aaa" 是对称字符串,而 "abc"、"abbaa" 不是对称字符串。

要求

  • 程序需通过键盘接收用户输入的一个字符串(假设输入不包含空格)
  • 使用字符串反转的方式判断该字符串是否为对称字符串
  • 输出判断结果,格式为:"当前字符串是对称字符串" 或 "当前字符串不是对称字符串"
public class test2 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入一个字符串");String str = sc.next();String result = new StringBuilder().append(str).reverse().toString();  //不太理解if (str.equals(result)) {System.out.println("当前字符串是对称字符串");} else{System.out.println("当前字符串不是对称字符串");}}
}

① reverse() 方法

  • 定义StringBuilder 和 StringBuffer 中的 reverse() 是无参数方法(方法声明为 public StringBuilder reverse()

  • 结论:括号里不能添加任何参数,否则会编译错误

② toString() 方法

  • 大多数情况下toString() 也是无参数方法(例如 StringBuilderObject 类中的定义都是 public String toString()),此时括号里不能加参数。

3. Stringjoiner

构造方法2+成员方法3:

方法名说明
public StringJoiner(间隔符号)创建一个 StringJoiner 对象,指定拼接时的间隔符号
public StringJoiner(间隔符号,开始符号,结束符号)创建一个 StringJoiner 对象,指定拼接时的间隔符号、开始符号、结束符号
public StringJoiner add(添加的内容)添加数据,并返回对象本身,支持链式调用
public int length()返回拼接后最终字符串的长度(字符出现的个数)
public String toString()返回拼接形成的最终字符串

4. 字符串原理

(1) 内存原理

  • 直接赋值会复用字符串常量池中的·

  • new出来不会复用,而是开辟一个新的空间

(2) 字符串拼接原理

  • 拼接无变量 ,编译后就是拼接后的结果,会复用串池里的字符串

  • 拼接有变量 , 每一行拼接的代码,都会在内存中创建心得字符串,浪费空间资源

http://www.dtcms.com/a/348499.html

相关文章:

  • 有哪些工具可以帮助监测和分析JVM的内存使用情况?
  • 前端漏洞(上)- Django debug page XSS漏洞(漏洞编号:CVE-2017-12794)
  • jvm对象内存占用
  • 基于Spring Cloud与Kafka的支付金融场景面试问答解析
  • 代码救世:我在末世用编程称王(1)
  • 模块测试与低功耗模式全攻略
  • 什么是 Nonce?
  • 一台Win11电脑桌面图标一直重复闪烁的解决办法
  • 阿里 通义千问 Java23种设计模式
  • Python性能优化实战(三):给内存“减负“的实用指南
  • mysql 5.7 查询运行时间较长的sql
  • 【数据结构入门】排序算法(2):直接选择排序->堆排序
  • NLP:Transformer各子模块作用(特别分享1)
  • Python JSON数据格式
  • 禁用 Nagle 算法(TCP_NODELAY)
  • 【数据结构】-5- 顺序表 (下)
  • 谷德红外温度传感器在 3D 打印领域应用探究
  • 【小程序-慕尚花坊02】网络请求封装和注意事项
  • 序言|从《Machine Learning: A Probabilistic Perspective》出发:我的学习实践
  • 16、web应用系统分析语设计
  • 经营分析的价值不在报告厚度,而在行动颗粒度
  • .NET反射与IL反编译核心技术
  • 关于 svn无法查看下拉日志提示“要离线”和根目录看日志“no data” 的解决方法
  • Rust Web开发指南 第三章(Axum 请求体解析:处理 JSON、表单与文件上传)
  • 【Python NTLK自然语言处理库】
  • 数学建模-线性规划(LP)
  • GPT-5国内免费体验
  • 【Android】从一个AndroidRuntime看类的加载
  • Unreal Engine 下载与安装全指南:从入门到配置详解
  • 淘宝API实战应用:数据驱动商品信息实时监控与增长策略