>[danger] ##### 循环字符串并记录
1. 键盘录入一个字符串,使用程序实现在控制台遍历该字符串,统计出这个字符串的大小写和数字的个数
* 注利用了 char 比较实际比较的是,自动类型提升为`int `查询`ascii`码表的技巧进行比较
~~~
import java.util.Scanner;
public class StringTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
// 获取字符串长度
int strLen = str.length();
// 统计记录
int numCount = 0;
int bigCount = 0;
int smallCount = 0;
for (int i = 0; i < strLen; i++) {
char c = str.charAt(i);
if (c >= 'a' && c <= 'z') {
// char类型的变量在参与计算的时候自动类型提升为int 查询ascii码表
smallCount++;
} else if (c >= 'A' && c <= 'Z') {
bigCount++;
} else if (c >= '0' && c <= '9') {
numCount++;
}
}
// 3.输出打印
System.out.println("小写字母有:" + smallCount + "个");
System.out.println("大写字母有:" + bigCount + "个");
System.out.println("数字字母有:" + numCount + "个");
}
}
~~~
>[danger] ##### 钱转换为中文表示
~~~
import java.util.Scanner;
public class StringTest {
public static void main(String[] args) {
// 1.键盘录入一个金额
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 = "";
// 2.得到money里面的每一位数字,再转成中文
while (true) {// 2135
// 从右往左获取数据,因为右侧是数据的个位
int ge = money % 10;
String capitalNumber = getCapitalNumber(ge);
// 把转换之后的大写拼接到moneyStr当中
moneyStr = capitalNumber + moneyStr;
// 第一次循环 : "伍" + "" = "伍"
// 第二次循环 : "叁" + "伍" = "叁伍"
// 去掉刚刚获取的数据
money = money / 10;
// 如果数字上的每一位全部获取到了,那么money记录的就是0,此时循环结束
if (money == 0) {
break;
}
}
// 3.在前面补0,补齐7位
int count = 7 - moneyStr.length();
for (int i = 0; i < count; i++) {
moneyStr = "零" + moneyStr;
}
System.out.println(moneyStr);// 零零零贰壹叁伍
// 4.插入单位
// 定义一个数组表示单位
String[] arr = { "佰", "拾", "万", "仟", "佰", "拾", "元" };
// 零 零 零 贰 壹 叁 伍
// 遍历moneyStr,依次得到 零 零 零 贰 壹 叁 伍
// 然后把arr的单位插入进去
String result = "";
for (int i = 0; i < moneyStr.length(); i++) {
char c = moneyStr.charAt(i);
// 把大写数字和单位拼接到result当中
result = result + c + arr[i];
}
// 5.打印最终结果
System.out.println(result);
}
// 定义一个方法把数字变成大写的中文
// 1 -- 壹
public static String getCapitalNumber(int number) {
// 定义数组,让数字跟大写的中文产生一个对应关系
String[] arr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
// 返回结果
return arr[number];
}
}
~~~
>[danger] ##### 将 字符串转换 为数字
1. 将字符串 **"123" => 123**
~~~
public class TestStr {
public static void main(String[] args) {
String str = "123";
// 直接转换
int num = Integer.parseInt(str);
System.out.println(num); // 123
// 通过循环累计计算
int num1 = 0;
for (int i = 0; i < str.length(); i++) {
// 从高位 依次累加到 个位 num1 * 10 每次扩大都会让
// 最先循环的数字 扩大十倍,最后扩大倍速和循环次数有关
num1 = num1 * 10 + (str.charAt(i) - '0'); // char - char = int '1' - '0' => 1 '2' - '0' => 2 ...
}
System.out.println(num1); // 123
}
}
~~~
>[danger] ##### 数字转换为字符串
~~~
public class TestStr {
public static void main(String[] args) {
int num = 123;
System.out.println(String.valueOf(num)); // 123
String str1 = "" + num; // 推荐使用
System.out.println(String.valueOf(str1)); // 123
}
}
~~~
>[danger] ##### 判断是否是回文字符串
1. 谓回文是指一个字符序列无论从左向右读还是从右向左读都是相同的字符串
~~~
public class TestStr {
public static void main(String[] args) {
String str = "abcba";
int strLen = str.length();
for (int i = 0; i < strLen / 2; i++) {
if (str.charAt(i) != str.charAt(strLen - 1 - i)) {
System.out.println("非回文");
break;
}
}
System.out.println("回文");
}
}
~~~
>[danger] ##### 实现用户伪登录功能
~~~
import java.util.Scanner;
public class TestStr {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int counts = 3;
while (counts-- > 0) {
String pwd = sc.next();
String userName = sc.next();
if (pwd.equals("123") && userName.equals("admin")) {
System.out.println("欢迎登陆");
break;
}
if (0 == counts) {
System.out.println("账户已冻结,请联系客服人员!");
} else {
System.out.println("用户名或密码错误,您还有" + counts + "次机会!");
}
}
// 关闭扫描器
sc.close();
}
}
~~~
>[danger] ##### 身份证转换
~~~
public class StringTest {
public static void main(String[] args) {
String id = "321281202001011234";
// 获取年月日
String year = id.substring(6, 10);
String month = id.substring(10, 12);
String day = id.substring(12, 14);
System.out.println("人物信息为:");
System.out.println("出生年月日:" + year + "年" + month + "月" + day + "日");
// 获取性别
char gender = id.charAt(16);// '3' ---> 3
// 获取的性别是一个 char 类型 为字符类型,因此字符转换为数字雷勇ascii
// 利用ASCII码表进行转换
// '0' ---> 48
// '1' ---> 49
// '2' ---> 50
// '3' ---> 51
// '4' ---> 52
// '5' ---> 53
// '6' ---> 54
// '7' ---> 55
// '8' ---> 56
// '9' ---> 57
int num = gender - 48;
if (num % 2 == 0) {
System.out.println("性别为:女");
} else {
System.out.println("性别为:男");
}
}
}
~~~
>[danger] ##### 文字替换
~~~
public class StringTest {
public static void main(String[] args) {
// 替换敏感词
String talk = "你玩的真好,以后不要再玩了,TMD,CNM";
// 敏感词数组
String[] strLs = { "TMD", "CNM", "GAD" };
for (int i = 0; i < strLs.length; i++) {
talk = talk.replaceAll(strLs[i], "***");
}
System.out.print(talk);
}
}
~~~
>[danger] ##### 罗马数字转换
~~~
import java.util.Scanner;
public class StringTest {
public static void main(String[] args) {
/*
* 键盘录入一个字符串,
* 要求1:长度为小于等于9
* 要求2:只能是数字
* 将内容变成罗马数字
* 下面是阿拉伯数字跟罗马数字的对比关系:
* Ⅰ-1、Ⅱ-2、Ⅲ-3、Ⅳ-4、Ⅴ-5、Ⅵ-6、Ⅶ-7、Ⅷ-8、Ⅸ-9
* 注意点:
* 罗马数字里面是没有0的
* 如果键盘录入的数字包含0,可以变成""(长度为0的字符串)
*/
Scanner sc = new Scanner(System.in);
String str = sc.next();
Boolean flag = checkStr(str);
// 字符串拼接使用StringBuilder
StringBuilder sb = new StringBuilder();
if (flag) {
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
int index = c - 48; // 利用ascii 获取实际值
String s = changeLuoMa(index);
sb.append(s);
}
}
System.out.println(sb);
}
// 检查输入的是否是数字
public static boolean checkStr(String str) {
// 判读长度不能大于9
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 = { "", "Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ" };
return arr[number];
}
}
~~~
* 使用switch
~~~
import java.util.Scanner;
public class Test1Case2 {
public static void main(String[] args) {
/* 键盘录入一个字符串,
要求1:长度为小于等于9
要求2:只能是数字
将内容变成罗马数字
下面是阿拉伯数字跟罗马数字的对比关系:
Ⅰ-1、Ⅱ-2、Ⅲ-3、Ⅳ-4、Ⅴ-5、Ⅵ-6、Ⅶ-7、Ⅷ-8、Ⅸ-9
注意点:
罗马数字里面是没有0的
如果键盘录入的数字包含0,可以变成""(长度为0的字符串)*/
//1.键盘录入一个字符串
//书写Scanner的代码
Scanner sc = new Scanner(System.in);
String str;
while (true) {
System.out.println("请输入一个字符串");
str = sc.next();
//2.校验字符串是否满足规则
boolean flag = checkStr(str);
if (flag) {
break;
} else {
System.out.println("当前的字符串不符合规则,请重新输入");
continue;
}
}
//将内容变成罗马数字
//下面是阿拉伯数字跟罗马数字的对比关系:
//Ⅰ-1、Ⅱ-2、Ⅲ-3、Ⅳ-4、Ⅴ-5、Ⅵ-6、Ⅶ-7、Ⅷ-8、Ⅸ-9
//查表法:数字跟数据产生一个对应关系
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
String s = changeLuoMa(c);
sb.append(s);
}
System.out.println(sb);
}
//利用switch进行匹配
public static String changeLuoMa(char number) {
String str = switch (number) {
case '0' -> "";
case '1' -> "Ⅰ";
case '2' -> "Ⅱ";
case '3' -> "Ⅲ";
case '4' -> "Ⅳ";
case '5' -> "Ⅴ";
case '6' -> "Ⅵ";
case '7' -> "Ⅶ";
case '8' -> "Ⅷ";
case '9' -> "Ⅸ";
default -> str = "";
};
return str;
}
public static boolean checkStr(String str) {//123456
//要求1:长度为小于等于9
if (str.length() > 9) {
return false;
}
//要求2:只能是数字
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);//0~9
if (c < '0' || c > '9') {
return false;
}
}
//只有当字符串里面所有的字符全都判断完毕了,我才能认为当前的字符串是符合规则
return true;
}
}
~~~
>[danger] ##### 字符串比较
~~~
public class StringTest {
public static void main(String[] args) {
// 1.定义两个字符串
String strA = "abcde";
String strB = "ABC";
// 2.调用方法进行比较
boolean result = check(strA, strB);
// 3.输出
System.out.println(result);
}
public static boolean check(String strA, String strB) {
for (int i = 0; i < strA.length(); i++) {
strA = rotate(strA);
if (strA.equals(strB)) {
return true;
}
}
return false;
}
// 旋转比较
public static String rotate(String str) {
// 使用字符拼接
char first = str.charAt(0);
String end = str.substring(1);
return first + end;
}
// 选择比较另外一种形式使用数组
public static String rotate1(String str) {
// 将字符串变为数组
char[] c = str.toCharArray();
char first = c[0];
for (int i = 1; i < c.length; i++) {
c[i - 1] = c[i];
}
c[c.length - 1] = first;
// 利用字符数组创建一个字符串对象
String result = new String(c);
return result;
}
}
~~~
>[danger] ##### 将字符串随机打乱
~~~
import java.util.Random;
import java.util.Scanner;
public class StringTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
// 将字符串转换为 char 数组
char[] c = str.toCharArray();
// 循环随机打乱数组
Random rd = new Random();
for (int i = 0; i < c.length; i++) {
int index = rd.nextInt(c.length);
char temp = c[i];
c[i] = c[index];
c[index] = temp;
}
str = new String(c);
System.out.print(str);
}
}
~~~
- windows -- 环境变量
- Vscode -- 编写java
- 初始java
- java -- 关键字
- 编写第一个java程序
- java -- 注释
- 计算机存储 -- 进制
- java -- 类型
- java -- 变量
- 数字类型
- 布尔类型
- 字符类型
- 类型转换
- 双等比较是什么
- java -- 运算符
- 算数运算符
- 字符串拼接
- 关系/比较运算符
- 自增减运算符
- 逻辑运算符
- 三目运算
- 赋值运算符
- 移位运算符
- 位运算符
- 运算符优先级
- java -- 流程控制语句
- if /else if /if -- 判断
- switch case分支结构
- for -- 循环
- 用双重for循环
- while -- 循环
- do while -- 循环
- 案例练习
- java -- 数组
- 数组的存储
- 数组的增删改查
- 数组的特点
- 数组案例
- 二维数组
- 数组的工具方法
- java -- 方法
- java -- 方法的重载
- java -- 方法的调用流程
- java -- 类方法传参注意事项
- java -- 方法练习案例
- 对比 return break continue
- for each循环
- java -- 基础练习
- java -- 面向对象
- java -- 创建类和对象
- java -- 访问控制符
- java -- 类成员方法
- java -- 构造方法
- java -- this
- java -- 封装
- java -- 对象内存图
- java -- 创建对象案例
- java -- static
- java -- 继承
- super -- 关键字
- java -- 构造块和静态代码块
- java -- 重写
- java -- final
- java -- 多态
- java -- 抽象类
- java -- 接口
- 引用类型数据转换
- 综合案例
- java -- 内部类
- java -- 回调模式
- java -- 枚举类型
- java -- switch 使用枚举
- java -- 枚举方法使用
- java -- 枚举类实现接口
- java -- javaBean
- java -- package 包
- java -- import
- java -- 递归练习
- java -- 设计模式
- 单例模式
- java -- 注解
- java -- 元注解
- Java -- 核心类库
- java -- 处理字符串
- Java -- String
- String -- 常用方法
- String -- 正则
- Java -- StringBuilder 和 StringBuffer
- 知识点
- Java -- StringJoiner 字符串拼接
- 练习题
- 字符串的总结
- Java -- 包装类
- Integer
- Double
- Boolean
- Character
- java -- 集合类
- java -- util.Collection
- Iterator接口
- java -- util.List
- java -- ArrayList
- java -- util.Queue
- java -- util.Set
- java -- util.Map
- java -- util.Collections
- Java -- Math
- Java -- java.lang
- Java -- Object
- Java -- 获取当前时间戳
- Java -- 异常
- Java -- java.util
- java -- Date
- java -- Calender
- Java -- java.text
- Java -- SimpleDateFormat
- Java -- java.time
- Java -- java.io
- java -- io.File
- java -- 泛型
- IDEA -- 用法