Java字符串训练
- 一、用户登录
- 二、统计字符次数
- 三、拼接字符串
-
- 1. 使用String
- 2. 使用StringBuilder
- 四、字符串反转
- 五、金额转换
- 六、手机号屏蔽
- 七、身份证信息查看
- 八、敏感词替换
- 九、对称字符串
- 十、数字转罗马数字
- 十一、调整字符串
- 十二、打乱字符串
一、用户登录
- 需求:已知正确的用户名和密码,请用程序实现模拟用户登录。
- 总共给三次机会,登录之后,给出相应的提示。
import java.util.Scanner;
public class StringTest1 {
public static void main(String[] args) {
String username = "abc";
String pw = "qwe";
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("请输入用户名:");
String inputUsername = scanner.next();
System.out.println("请输入密码:");
String inputPassword = scanner.next();
if (inputUsername.equals(username) && inputPassword.equals(pw)) {
System.out.println("登录成功");
break;
} else {
if (i == 2) {
System.out.println("账户"+inputUsername+"被锁定");
}else {
System.out.println("账号或密码错误,你还剩下" + (2 - i) + "次机会");
}
}
}
}
}

二、统计字符次数
- 需求:键盘录入一个字符串,统计该字符串中大写字母字符、小写字母字符、数字字符出现的次数(不考虑其他字符)
import java.util.Scanner;
public class StringTest2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串");
String str = scanner.next();
int bigCount = 0;
int smallCount = 0;
int numberCount = 0;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c >= 'a' && c <= 'z') {
smallCount++;
} else if (c >= 'A' && c <= 'Z') {
bigCount++;
} else if (c >= '0' && c <= '9') {
numberCount++;
}
}
System.out.println("小写字母有:" + smallCount + "个");
System.out.println("大写字母有:" + bigCount + "个");
System.out.println("数字有:" + numberCount + "个");
}
}

三、拼接字符串
- 需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。
- 例如:数组为 int[] arr = {1, 2, 3},执行方法后的输出结果为:[1, 2, 3]
1. 使用String
public class StringTest3 {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
String s = arrToString(arr);
System.out.println(s);
}
public static String arrToString(int[] arr) {
if (arr == null) {
return "";
}
if (arr.length == 0) {
return "[]";
}
String result = "[";
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
result += arr[i];
}else {
result += arr[i] + ", ";
}
}
result += "]";
return result;
}
}
2. 使用StringBuilder
public class StringBuilderTest1 {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
String s = arrToString(arr);
System.out.println(s);
}
public static String arrToString(int[] arr) {
StringBuilder sb = new StringBuilder();
sb.append("[");
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();
}
}

四、字符串反转
- 需求:定义一个方法,实现字符串反转。
- 键盘录入一个字符串,调用该方法后,在控制台输出结果。
- 例如:键盘录入abc,输出结果cba。
import java.util.Scanner;
public class StringTest4 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串");
String str = scanner.next();
String reverser = reverser(str);
System.out.println(reverser);
}
public static String reverser(String str) {
String result = "";
for (int i = str.length() - 1; i >= 0; i--) {
char c = str.charAt(i);
result += c;
}
return result;
}
}

五、金额转换
- 需求:键盘录入一个七位以内的正整数,将整数转为中文描述,不足七位补零。

import java.util.Scanner;
public class StringTest5 {
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];
}
}

六、手机号屏蔽
- 需求:已知一个11位手机号,把该手机号4~7位改成****。
public class StringTest6 {
public static void main(String[] args) {
String phoneNumber = "13112349468";
System.out.println(phoneNumber);
String start = phoneNumber.substring(0, 3);
String end = phoneNumber.substring(7);
System.out.println(start + "****" + end);
}
}

七、身份证信息查看
public class StringTest7 {
public static void main(String[] args) {
String id = "123456202001011234";
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);
int num = gender - 48;
if (num % 2 == 0) {
System.out.println("性别为:女");
} else {
System.out.println("性别为:男");
}
}
}

八、敏感词替换
public class StringTest8 {
public static void main(String[] args) {
String talk = "你玩的真好,以后不要再玩了,TMD";
System.out.println(talk);
String[] arr = {"TMD", "CNM", "MLGB", "SB"};
for (int i = 0; i < arr.length; i++) {
talk = talk.replace(arr[i], "***");
}
System.out.println(talk);
}
}

九、对称字符串
- 需求:键盘接受一个字符串,程序判断出该字符串是否是对称字符串,并在控制台打印是或不是。
- 对称字符串:123321、111。
- 非对称字符串:123123。
import java.util.Scanner;
public class StringBuilderDemo2 {
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 (result.equals(str)) {
System.out.println(str + " 是对称字符串");
} else {
System.out.println(str + " 不是对称字符串");
}
}
}

十、数字转罗马数字
- 需求:键盘录入一个长度小于等于9的数字字符串,将内容变成罗马数字
- 罗马数字没有0,如果键盘录入包含0,可以变成
" "
import java.util.Scanner;
public class StringTest9 {
public static void main(String[] args) {
String str;
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入一个数字:");
str = scanner.next();
boolean flag = checkStr(str);
if (flag) {
break;
} else {
System.out.println("当前字符串不符合规则,请重新输入");
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
int number = c - 48;
String s = changeLuoMa(number);
sb.append(s).append(" ");
}
System.out.println(sb);
}
public static String changeLuoMa(int number) {
String[] arr = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
return arr[number];
}
public static boolean checkStr(String str) {
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;
}
}

十一、调整字符串
- 给定两个字符串,A和B
- A的旋转操作就是将A最左边的字符移动到最右边。
- 例如:若A=“abcde”,在移动一次之后结果就是:“bcdea”
- 如果在若干次调整操作之后,A能变成B,那么返回True
- 如果不能匹配成功,则返回false
public class StringTest10 {
public static void main(String[] args) {
String A = "abcde";
String B = "cdeab";
System.out.println("A = \"abcde\"");
System.out.println("B = \"cdeab\"");
System.out.println(check(A, B) ? "True" : "False");
}
public static boolean check(String strA, String strB) {
for (int i = 0; i < strA.length(); i++) {
strA = strA.substring(1) + strA.charAt(0);
if (strA.equals(strB)) return true;
}
return false;
}
}

十二、打乱字符串
import java.util.Random;
import java.util.Scanner;
public class StringTest11 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = scanner.next();
char[] chars = str.toCharArray();
Random random = new Random();
for (int i = 0; i < chars.length; i++) {
int randomIndex = random.nextInt(chars.length - 1);
char temp = chars[randomIndex];
chars[randomIndex] = chars[i];
chars[i] = temp;
}
String result = new String(chars);
System.out.println(result);
}
}
