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.pswp.cn/news/919951.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919951.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919951.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

云原生俱樂部-k8s知識點歸納(5)

寫到這里&#xff0c;k8s的內容已經到一半了&#xff0c;雖然后面的內容我覺得更加玄學一點。控制器真的是個神奇的東西&#xff0c;雖然后面的CRD會帶著大家一起做一個控制器&#xff0c;但是還是覺得很奇妙。控制器大概就是k8s中的精華了&#xff0c;通過控制器去監聽k8s中ap…

C++復習2

C繼承 繼承的概念 繼承&#xff08;inheritance&#xff09;機制是面向對象程序設計使代碼可以復用的重要的手段&#xff0c;它允許程序員在保持原有類特性的基礎上進行擴展&#xff0c;增加功能&#xff0c;這樣產生新的類&#xff0c;稱為派生類。 繼承呈現了面向對象程序設計…

ZKmall模塊商城的跨境電商支付安全方案:加密與權限的雙重防護

跨境電商支付環節面臨雙重挑戰&#xff1a;一方面&#xff0c;不同國家的支付協議、貨幣結算規則差異顯著&#xff0c;需滿足多幣種、多渠道的支付需求&#xff1b;另一方面&#xff0c;跨境數據傳輸的安全性與操作權限的嚴格管控直接關系到資金安全與合規性。ZKmall 模塊商城針…

【數據結構】-5- 順序表 (下)

一、集合框架 這是 Java 集合框架&#xff08;Java Collections Framework&#xff09;的核心繼承關系樹狀圖1. 最頂層&#xff1a;Iterable&#xff08;接口&#xff09;作用&#xff1a;所有 “可迭代” 的集合&#xff08;如 List、Set、Queue&#xff09;都必須實現它&…

最大連續1的個數Ⅲ-滑動窗口

1004. 最大連續1的個數 III - 力扣&#xff08;LeetCode&#xff09; Solution 標準滑動窗口。 class Solution { public:int longestOnes(vector<int>& nums, int k) {int nnums.size();int l0,z_cnt0,ans0;for(int r0;r<n;r){z_cnt1-nums[r];while(z_cnt>k…

實驗二 Cisco IOS Site-to-Site Pre-share Key

一 實驗設備 1、 CISCO 路由器 2 臺 二 實驗拓撲圖 三 實驗配置 1、 R1 路由器上連通性配置 R1(config)#interface e0/0 R1(config-if)#ip address 192.168.1.2 255.255.255.0 R1(config-if)#no shutdown R1(config)#interface e1/0 R1(config-if)#ip address 10.1.20.1 255.25…

深入理解 Rust Axum:兩種依賴注入模式的實踐與對比(二)

前言 我想把使用 Rust 開發Websocket 服務的文章寫成一個系列&#xff0c;前面寫了一遍如何使用 Axum 搭建一個Websocket 服務的文章&#xff0c;我們可以和前端demo頁面進行全雙工的 Websocket 消息傳輸&#xff0c;而且可以啟用 HTTP2 的同時啟用 TLS。 這時候問題來了&…

syn與quote的使用——結構體轉create語句

前言 syn和quote的簡單使用——生成結構體-CSDN博客https://blog.csdn.net/qq_63401240/article/details/150609865?spm1001.2014.3001.5501 前面使用syn和quote&#xff0c;發現挺好玩的&#xff0c;感覺可以干很多事情&#xff0c;不愧是Rust中的宏。 宏分為聲明宏和過程…

集中式負載均衡 vs. 分布式負載均衡

集中式負載均衡 vs. 分布式負載均衡負載均衡&#xff08;Load Balancing&#xff09;是任何可伸縮系統的“交通警察”。 集中式負載均衡&#xff08;Centralized LB&#xff09;與分布式負載均衡&#xff08;Distributed LB&#xff09;代表了兩種截然不同的“指揮哲學”&#…

【機器學習】9 Generalized linear models and the exponential family

本章目錄 9 Generalized linear models and the exponential family 281 9.1 Introduction 281 9.2 The exponential family 281 9.2.1 Definition 282 9.2.2 Examples 282 9.2.3 Log partition function 284 9.2.4 MLE for the exponential family 286 9.2.5 Bayes for the e…

EndNote 2025 Mac 文獻管理工具

原文地址&#xff1a;EndNote 2025 Mac 文獻管理工具 EndNote mac版一款文獻管理工具&#xff0c;支持國際期刊的參考文獻格式有3776種&#xff0c;寫作模板幾百種&#xff0c;涵蓋各個領域的雜志。 EndNote mac不僅僅局限于投稿論文的寫作&#xff0c;對于研究生畢業論文的寫…

openEuler系統中home文件夾下huawei、HwHiAiUser、lost+found 文件夾的區別和作用

在 openEuler 系統的 /home 目錄下出現的 huawei、HwHiAiUser 和 lost+found 文件夾,分別對應不同的功能和用途,具體區別和作用如下: 1. lost+found 文件夾 通用 Linux 系統文件夾:lost+found 是所有 Linux 系統(包括 openEuler)中默認存在的文件夾,并非 openEuler 特有…

Electron 核心 API 全解析:從基礎到實戰場景

Electron 憑借豐富的 API 體系&#xff0c;讓前端開發者能輕松調用系統級能力。本文將系統梳理 Electron 核心 API 的分類、使用場景及實戰示例&#xff0c;幫你快速掌握從窗口管理到進程通信的全場景開發。 一、主進程核心 API&#xff08;Main Process&#xff09; 主進程是…

創建線程的方式有哪些?

1. 創建線程的方式有哪些?繼承Thread類實現runnable接口實現Callable接口線程池創建線程(項目中使用方式)2. runnable 和 callable 有什么區別?Runnable接口run方法沒有返回值Callable接口call方法有返回值,需要FutureTask獲取結果Callable接口的call()方法允許拋出異常;而Ru…

More Effective C++ 條款05: 謹慎定義類型轉換函數

More Effective C 條款05&#xff1a;謹慎定義類型轉換函數核心思想&#xff1a;C中的隱式類型轉換雖然方便&#xff0c;但容易導致意外的行為和維護難題。應當通過explicit關鍵字和命名轉換函數等方式嚴格控制類型轉換&#xff0c;優先使用顯式轉換而非隱式轉換。 &#x1f68…

基于springboot的理商管理平臺設計與實現、java/vue/mvc

基于springboot的理商管理平臺設計與實現、java/vue/mvc

Flask藍圖:模塊化開發的利器

藍圖為什么要使用藍圖模塊化組織&#xff1a;將應用分解為可重用的模塊&#xff08;組件&#xff09;。每個藍圖封裝了相關的視圖、靜態文件、模板等。按功能劃分&#xff1a;將大型應用按功能模塊劃分&#xff08;例如&#xff1a;用戶認證、博客、管理后臺&#xff09;&#…

設計模式詳解

1.創建類型1.1 簡單工廠startuml抽象產品接口 interface Product { Operation(): string } 具體產品A class ConcreteProductA { Operation(): string } 具體產品B class ConcreteProductB { Operation(): string } 工廠類 class Factory { CreateProduct(type: string): Produ…

前端查漏補缺

插槽默認、具名&#xff08;多個插槽&#xff09;、作用域&#xff08;接收子組件數據&#xff09;//具名 <div class"container"><header><slot name"header"></slot></header><main><slot></slot></…

網絡協議UDP、TCP

一、網絡協議 UDPUDP用戶數據報協議&#xff1a;傳輸層網絡編程模型B/S模型&#xff1a;browser/server&#xff08;瀏覽器/服務器&#xff09;客戶端是通用的客戶端&#xff08;瀏覽器&#xff09;一般只做服務器開發客戶端要加載的數據均來自服務器C/S模型&#xff1a;client…