Java字符串综合案例(一)

201 阅读14分钟

目录

  • 验证密码
  • 字符串遍历
  • 字符串拼接
  • 字符串反转
  • 字符串替换
  • 金额转换
  • 对称字符串
  • 转换罗马数字
  • 旋转字符串

验证密码

需求:已知正确用户名和密码,请用程序实现模拟用户登录。 总共给3次机会,登录之后,给出相对应的提示。

第一步:定义用户名和密码

// 1.定义正确的用户名和密码。
String rightUserName = "zhangsan";
String rightUserPassWord = "123456";

第二步:键盘输入用户名和密码

Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String userName = sc.next();

第三步:判断用户名是否正确,正确就输入密码,错误就提示用户名错误

if(userName.equals(rightUserName)){
    // 用户名存在
}else{
    // 用户名不存在
    System.out.println("您的用户名错误!");
}

第四步:验证密码

for (int i = 0; i < 3; i++) {
    System.out.println("请输入密码:");
    String userPasssWord = sc.next();
    if(userPasssWord.equals(rightUserPassWord)){
        System.out.println("登录成功!");
    }else{
        // 错误次数
    }
}

第五步:添加计时器

// 当i=2时已经执行了3次,3次过后就锁定这个账户
if(i == 2){
    System.out.println("您的用户名" + rightUserName + "已被锁定");
}else{
    System.out.println("您的密码错误!还剩下" + (2 - i) + "次机会!");
}

我们来运行看一下吧:

image.png

我们来看一下完整代码吧:

// 1.定义正确的用户名和密码。
String rightUserName = "zhangsan";
String rightUserPassWord = "123456";

// 2.键盘输入用户名和密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String userName = sc.next();
if(userName.equals(rightUserName)){
    for (int i = 0; i < 3; i++) {
        System.out.println("请输入密码:");
        String userPasssWord = sc.next();
        if(userPasssWord.equals(rightUserPassWord)){
            System.out.println("登录成功!");
        }else{
            // 当i=2时已经执行了3次,3次过后就锁定这个账户
            if(i == 2){
                System.out.println("您的用户名" + rightUserName + "已被锁定");
            }else{
                System.out.println("您的密码错误!还剩下" + (2 - i) + "次机会!");
            }
        }
    }
}else{
    System.out.println("您的用户名错误!");
}

字符串遍历

需求:键盘录入一个字符串,统计该字符串中大写字符和小写字母,数字字符出现的次数。

第一步:键盘录入一个字符串

// 1.键盘录入一个字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.next();

第二步:定义三个计数器用来统计个数

int bigcount = 0, smallCount = 0, numberCount = 0;

第三步:循环遍历每一个字符串的字符

for (int i = 0; i < str.length(); i++) {
    // 3.遍历每个字符串的字符
    char c = str.charAt(i);
    // char类型的变量在参与计算的时候自动提升为int类型然后查询ASCII码表
    if(c >= 'A' && c <= 'Z'){
        bigcount++;
    }else if(c >= 'a' && c <= 'z'){
        smallCount++;
    }else if(c >= '0' && c <= '9'){
        numberCount++;
    }
}

我们来运行看一下吧:

image.png

完整代码:

// 1.键盘录入一个字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.next();
// 2.定义三个计数器count用来统计出现重复的个数
int bigcount = 0, smallCount = 0, numberCount = 0;
for (int i = 0; i < str.length(); i++) {
    // 3.遍历每个字符串的字符
    char c = str.charAt(i);
    // char类型的变量在参与计算的时候自动提升为int类型然后查询ASCII码表
    if(c >= 'A' && c <= 'Z'){
        bigcount++;
    }else if(c >= 'a' && c <= 'z'){
        smallCount++;
    }else if(c >= '0' && c <= '9'){
        numberCount++;
    }
}
System.out.println("大写字母有:" + bigcount + "个" + "\n" + "小写字母有:" + smallCount + "个" + "\n" + "数字有:" + numberCount + "个" );

字符串拼接

需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回。

调用该方法,并在控制台输出结果。例:数组为int[] arr={1,2,3,4,5};输出结果:[1,2,3,4,5]

第一步:定义一个数组字符串

int[] arr = {1,2,3,4,5};

第二步:定义一个方法用来拼接字符串并对传过来的数据做判断

public static String toString(int[] arr){
   // 2.对传过来的数据做一些非空判断
   if(arr == null){
       return " ";
   }
    if(arr.length == 0){
        return "[]";
    }
}

第三步:循环遍历每个字符进行拼接

// 3.利用循环进行遍历每个字符进行拼接
for (int i = 0; i < arr.length; i++) {
    if(i == arr.length -1){
        resulr += arr[i];
    }else{
        resulr += arr[i] + ",";
    }
}

我们来运行看一下:

image.png

完整代码:

public static void main(String[] args) {
    int[] arr = {1,2,3,4,5};

    System.out.println(toString(arr));
 }
 // 1.定义一个方法用来拼接字符串
 public static String toString(int[] arr){
    // 2.对传过来的数据做一些非空判断
    if(arr == null){
        return " ";
    }
     if(arr.length == 0){
         return "[]";
     }
     // 3.定义一个字符串拼接左括号[
     String resulr = "[";
     // 4.利用循环进行遍历每个字符进行拼接
     for (int i = 0; i < arr.length; i++) {
         if(i == arr.length -1){
             resulr += arr[i];
         }else{
             resulr += arr[i] + ",";
         }
     }
     return resulr + "]";
 }

字符串反转

需求:定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法,在控制台输出结果。

例如:输入abc,输出cba

第一步:键盘录入

// 1.键盘输入一个字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.next();

第二步:定义一个方法用来反转并拼接

// 2.定义一个方法用来反转
public static String rollbackstr(String str){
    String result = "";
    // 利用循环进行遍历每个字符进行拼接
    for (int i = str.length() - 1; i >= 0; i--) {
        char c = str.charAt(i);
        // 3.用定义的字符串进行反转拼接
        result += c;
    }
    return result;
}

第三步:调用方法进行反转

String result = rollbackstr(str);
System.out.println(result);

我们来运行看一下:

image.png

完整代码:

public static void main(String[] args) {
    // 1.键盘输入一个字符串
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入一个字符串:");
    String str = sc.next();
    // 4.调用方法进行反转输出
    String result = rollbackstr(str);
    System.out.println(result);
}

// 2.定义一个方法用来反转
public static String rollbackstr(String str){
    String result = "";
    // 利用循环进行遍历每个字符进行拼接
    for (int i = str.length() - 1; i >= 0; i--) {
        char c = str.charAt(i);
        // 3.用定义的字符串进行反转拼接
        result += c;
    }
    return result;
}

字符串替换

需求:定义一个数组存放敏感词,并对敏感词进行屏蔽输出

第一步:定义一个字符串

// 1.定义一个字符串
String str = "你玩的很好,以后不要在玩了,TMD,SB";

第二步:定义敏感词库

// 2.定义一个敏感词库
String[] arr = {"TMD","SB","CNM","MLGB"};

第三步:循环得到每个敏感词并替换

// 3.循环得到数组中的每一个敏感词进行替换
for (int i = 0; i < arr.length; i++) {
    str = str.replace(arr[i],"***");
}

我们来运行看一下:

image.png

完整代码:

    // 1.定义一个字符串
    String str = "你玩的很好,以后不要在玩了,TMD,SB";
    // 把里面的敏感词替换为星号
    // 2.定义一个敏感词库
    String[] arr = {"TMD","SB","CNM","MLGB"};
    // 3.循环得到数组中的每一个敏感词进行替换
    for (int i = 0; i < arr.length; i++) {
        str = str.replace(arr[i],"***");
    }
    System.out.println(str);

金额转换

如下图所示:定义一个方法输入整数然后输出中文数字 image.png

第一步:键盘输入一个整数

// 1.键盘录入一个整数
Scanner sc = new Scanner(System.in);
int money;

第二步:对数字进行判断负数和范围。

// 2.对输入的数字进行判断
if(money >= 0 && money <= 9999999){
    break;
}else{
    System.out.println("金额无效,请重新输入!");
}

第三步:得到字符串里面的每一个数字

// 3.得到money里面的每一位数字,在转成中文
while (true) {
}

第四步:从右依次获取数据

// 3.1 从右往左获取数据,因为右侧是数据的个数
int ge = money % 10;
// 去掉刚刚获取的数据
money /= 10;
// 3.2 如果数字上的每一位全部获取到了,那么money记录的就是0,循环结束
if(money == 0){
    break;
}

第五步:定义一个方法转换为中文数字

public static String getNumber(int number){
    // 4.1 定义数组,让数字跟大写的中文产生一个对应。
    String[] arr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    // 返回结果  如果传过来的是1,就把number当索引找到索引为1的中文壹给你反回去。
    return arr[number];
}

第六步:将输入的数字调用方法获取到对应的中文

// 5.将数字传递过去获取到大写
String capNumber = getNumber(ge);

第七步:定义一个字符串用来拼接中文数字

// 6. 定义一个字符串用来拼接钱的大写
String moneystr = "";

// 6.1 把转换之后的大写进行拼接到moneystr中
moneystr = capNumber + moneystr;

第八步:补齐剩余长度

// 7.在前面补0,补齐7位,7-moneystr的长度
int count = 7 - moneystr.length();
for (int i = 0; i < count; i++) {
    moneystr = "零" + moneystr;
}

第九步:循环拼接每一个单位

// 8.插入单位,定义一个数组表示单位
String result = "";
String[] arr = {"佰","拾","万","仟","佰","拾","元"};
// 8.1 遍历moneystr,依次得到每一位。
for (int i = 0; i < moneystr.length(); i++) {
    char c = moneystr.charAt(i);
    // 8.2 把大写数字和单位拼接给result
    result += c + arr[i];
}

我们来运行看一下:

image.png

完整代码:

public static void main(String[] args) {
    // 1.键盘录入一个整数
    Scanner sc = new Scanner(System.in);
    int money;
    while (true) {
        System.out.println("请输入一个金额:");
        money = sc.nextInt();
        // 2.对输入的数字进行判断
        if(money >= 0 && money <= 9999999){
            break;
        }else{
            System.out.println("金额无效,请重新输入!");
        }
    }

    // 6. 定义一个字符串用来拼接钱的大写
    String moneystr = "";

    // 3.得到money里面的每一位数字,在转成中文
    while (true) {
        // 3.1 从右往左获取数据,因为右侧是数据的个数
        int ge = money % 10;
        // 去掉刚刚获取的数据
        money /= 10;

        // 5.将数字传递过去获取到大写
        String capNumber = getNumber(ge);

        // 6.1 把转换之后的大写进行拼接到moneystr中
        moneystr = capNumber + moneystr;

        // 3.2 如果数字上的每一位全部获取到了,那么money记录的就是0,循环结束
        if(money == 0){
            break;
        }
    }

    // 7.在前面补0,补齐7位,7-moneystr的长度
    int count = 7 - moneystr.length();
    for (int i = 0; i < count; i++) {
        moneystr = "零" + moneystr;
    }

    // 8.插入单位,定义一个数组表示单位
    String result = "";
    String[] arr = {"佰","拾","万","仟","佰","拾","元"};
    // 8.1 遍历moneystr,依次得到每一位。
    for (int i = 0; i < moneystr.length(); i++) {
        char c = moneystr.charAt(i);
        // 8.2 把大写数字和单位拼接给result
        result += c + arr[i];
    }
    System.out.println(result);
}


// 4.定义一个方法,把数字变成大写的中文
public static String getNumber(int number){
    // 4.1 定义数组,让数字跟大写的中文产生一个对应。
    String[] arr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    // 返回结果  如果传过来的是1,就把number当索引找到索引为1的中文壹给你反回去。
    return arr[number];
}

对称字符串

需求:键盘接收一个字符串,程序判断该字符是否是对称字符串,并在控制台打印是或者不是。 对称字符串:123321、111,非对称字符串:123123

第一步:键盘录入一个字符串

// 1.键录入一个字符串。
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.next();

第二步:反转输入的字符串

// 2.反转键盘录入的字符串。
String result = new StringBuilder().append(str).reverse().toString();

第三步:比较是不是对称

// 3.比较字符串
if(str.equals(result)){
    System.out.println("是");
}else{
    System.out.println("不是");
}

运行看一下吧:

image.png

转换罗马数字

要求1:长度小于等于9。 要求2:只能是数字。

将内容变成罗马数字,下面是阿拉伯数字跟罗马数字的对比关系。

Ⅰ - 1,Ⅱ -2,Ⅲ-3 Ⅳ -4,Ⅴ -5,Ⅵ -6,Ⅶ -7,Ⅷ -8,Ⅸ -9。

注意:罗马数字数字没有0,如果键盘录入的数字包含0,可以变成""长度为0的字符串

第一步:键盘录入

// 1. 键盘录入
Scanner sc = new Scanner(System.in);
String str;

System.out.println("请输入一个字符串:");
str = sc.next();

第二步:定义一个方法判断字符串是否满足

// 2. 定义一个方法校验字符串是否满足要求
public static boolean checkStr(String str){
    // 2.1 判断长度小于等于9
    if(str.length() > 9){
        return false;
    }
    // 2.2 只能是数字
    for (int i = 0; i < str.length(); i++) {
        char c = str.charAt(i);
        if(c < '0' || c > '9'){
            return false;
        }
    }
    // 放字符串的所有字符全部循环判断结束后才能符合规则,然后返回true。
    return true;
}

第三步:调用方法校验

// 2.3 调用方法校验满足规则
boolean flag = checkStr(str);
if(flag){
    break;
}else{
    System.out.println("当前输入的字符串不符合规则,请重新输入");
    continue;
}

第四步:定义查表法,用数组让罗马数字产生一个对应

// 3. 定义查表法,让数字跟数据产生一个对应关系
public static String changeLuoMa(int number){
    // 定义一个数组,让索引跟罗马数字产生一个对应关系
    String[] arr = {"","Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ","Ⅷ","Ⅸ"};
    return arr[number];
}

第五步:遍历字符串得到每一位数字

// 3.1 遍历每一个字符并调用方法得到罗马数字
// 利用StringJoiner将字符进行拼接
StringJoiner s1 = new StringJoiner(",");
for (int i = 0; i < str.length(); i++) {
    // 遍历转为每个字符
    char c = str.charAt(i);
    // 得到字符后利用ASCII码表转为数字
    int number = c - 48;
    // 调用方法得到每一个对应的罗马数字
    String s = changeLuoMa(number);
    s1.add(s);
}

我们来运行看一下:

image.png

完整代码:

// 1. 键盘录入
    Scanner sc = new Scanner(System.in);
    String str;
    while (true) {
        System.out.println("请输入一个字符串:");
        str = sc.next();

        // 2.3 调用方法校验满足规则
        boolean flag = checkStr(str);
        if(flag){
            break;
        }else{
            System.out.println("当前输入的字符串不符合规则,请重新输入");
            continue;
        }
    }

    // 3.1 遍历每一个字符并调用方法得到罗马数字
    // 利用StringJoiner将字符进行拼接
    StringJoiner s1 = new StringJoiner(",");
    for (int i = 0; i < str.length(); i++) {
        // 遍历转为每个字符
        char c = str.charAt(i);
        // 得到字符后利用ASCII码表转为数字
        int number = c - 48;
        // 调用方法得到每一个对应的罗马数字
        String s = changeLuoMa(number);
        s1.add(s);
    }
    System.out.println(s1);
}

// 2. 定义一个方法校验字符串是否满足要求
public static boolean checkStr(String str){
    // 2.1 判断长度小于等于9
    if(str.length() > 9){
        return false;
    }
    // 2.2 只能是数字
    for (int i = 0; i < str.length(); i++) {
        char c = str.charAt(i);
        if(c < '0' || c > '9'){
            return false;
        }
    }
    // 放字符串的所有字符全部循环判断结束后才能符合规则,然后返回true。
    return true;
}


// 3. 定义查表法,让数字跟数据产生一个对应关系
public static String changeLuoMa(int number){
    // 定义一个数组,让索引跟罗马数字产生一个对应关系
    String[] arr = {"","Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ","Ⅷ","Ⅸ"};
    return arr[number];
}

旋转字符串

要求:给定2个字符串A,B。A的旋转操作就是将A最左边的字符移到最右边。

例如:若A = 'abcde',在移动一次之后结果就是‘bcdea’。

如果在若干次调整操作之后,A能变成B,那么返回true,如果不能就返回false

第一步:定义两个字符串

// 1.定义两个字符串
String strA = "abcde";
String strB = "cdeab";

第二步:定义一个方法用来旋转字符串

// 2.定义一个方法用来旋转字符串,把左侧的字符串移动到右侧去。
public static String totate(String str){
    // 截取思路:
    // 获取最左侧的那个字符
    char first = str.charAt(0);
    // 获取剩余的字符
    String end = str.substring(1);
    return end + first;
    
    

    // 变成数组思路:
    char[] arr = str.toCharArray();
    // 获取0索引上的字符
    char first = arr[0];
    // 获取剩余的字符依次往前挪一个位置
    for (int i = 1; i < arr.length; i++) {
        arr[i - 1] = arr[i];
    }
    // 把原来0索引上的字符放到最后一个索引
    arr[arr.length - 1] = first;
    // 利用字符数组创建一个字符串对象
    String result = new String(arr);
    return result;
}

第三步:调用旋转方法

public static boolean check(String strA,String strB){
    for (int i = 0; i < strA.length(); i++) {
        // 调用totate方法将strA的字符进行旋转
        strA = totate(strA);
        // 每旋转一次就拿strB比较,如果不一样就继续执行循环
        if(strA.equals(strB)){
            return true;
        }
    }
    return false;
}

第四步:传值比较

boolean check = check(strA, strB);

我们来看一下完整代码吧:

public static void main(String[] args) { 
    // 1.定义两个字符串
    String strA = "abcde";
    String strB = "cdeab";

    // 2.调用循环旋转方法 abcde -> bcdea -> cdeab -> deabc
    boolean check = check(strA, strB);
    System.out.println(check);
}

// 2.定义一个方法用来旋转字符串,把左侧的字符串移动到右侧去。
// 形参:旋转前的字符串
// 返回值:旋转后的字符串
public static String totate(String str){
    // 如果我们看到要修改的字符串内容,可以有两个方法
    // 1.用subString进行截取,把左边的字符截取出来拼接到右侧去。
    // 2.可以把字符串变成一个字符数组,然后调整字符数组的数据,最后再把字符数组变成字符串

    // 截取思路:
    // 获取最左侧的那个字符
    char first = str.charAt(0);
    // 获取剩余的字符
    String end = str.substring(1);
    return end + first;
}

// 3.定义一个方法用来循环旋转字符串
public static boolean check(String strA,String strB){
    for (int i = 0; i < strA.length(); i++) {
        // 调用totate方法将strA的字符进行旋转
        strA = totate(strA);
        // 每旋转一次就拿strB比较,如果不一样就继续执行循环
        if(strA.equals(strB)){
            return true;
        }
    }
    return false;
}

好啦,以上就是常用的字符串练习,有什么不懂的可以在评论区评论,我们下期不见不散哟!

==最后非常感谢您的阅读,也希望能得到您的反馈  ==