JAVA字符串刷题(力扣经典算法及题解)

news2024/9/22 21:32:08

练习一:

输入字符串aba,依次输出各个字符


import java.util.Scanner;

public class StringTomrs {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String number=sc.next();
        System.out.println("输入的字符串是"+number);
        for(int i=0;i<number.length();i++){
            char c=number.charAt(i);
            System.out.println(c);
        }
    }

}

代码实现

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String number = sc.next();
        System.out.println("输入的字符串是:" + number);

        // 使用 StringBuilder 来反转字符串
        StringBuilder sb = new StringBuilder(number);
        String reversed = sb.reverse().toString();

        System.out.println("反转后的字符串是:" + reversed);
    }
}

输出结果

练习 三:统计字符串次数


import java.util.Scanner;

public class StringTomrs {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int count=0,count1=0,count2=0;
        String number=sc.next();
        System.out.println("输入的字符串是"+number);
        for(int i=0;i<number.length();i++){
            char c=number.charAt(i);
            if(c>='a'&&c<='z'){
                count++;
            }else if(c>='A'&&c<='Z'){
                count1++;
            }else if(c>='0'&&c<='9'){
                count2++;
            }else{
                System.out.println("出错了");
            }

        }
        System.out.println("大写字母有"+count1);
        System.out.println("小写字母有"+count);
        System.out.println("数字有"+count2);
    }




}

输出结果:

练习四:拼接字符串

代码实现:


import java.util.Scanner;

public class StringTomrs {
    public static void main(String[] args) {
        int arr[]= {1,3,5};
        String pingjie="[ ";
        for(int i=0;i<arr.length-1;i++){
         pingjie=pingjie+arr[i]+",";
        }
        pingjie=pingjie+arr[arr.length-1]+"]";

        System.out.println(pingjie);
    }

}

实现结果

错误代码


import java.util.Scanner;

public class StringTomrs {
    public static void main(String[] args) {
        int arr[]= {1,3,5};
        String pingjie="[ ";
        for(int i=0;i<arr.length-1;i++){
         pingjie=pingjie+arr[i]+",";
        }
        pingjie=pingjie+arr[arr.length]+"]";

        System.out.println(pingjie);
    }




}

 


import java.util.Scanner;

public class StringTomrs {
    public static void main(String[] args) {
        int arr[]= {1,3,5};
       String result=arrtoString(arr);
        System.out.println(result);
    }

public static String arrtoString(int[] arr){
        if(arr==null){
            return " ";
        }else if(arr.length==0){
            return "[ ]";
        }else {
            String pingjie="[ ";
            for(int i=0;i<arr.length-1;i++){
                pingjie=pingjie+arr[i]+",";
            }
            pingjie=pingjie+arr[arr.length-1]+"]";

            return pingjie;

        }
}


}

输出结果

练习五:金额转换

实现思路:

代码实现:


import java.util.Scanner;

public class StringTomrs {
    public static void main(String[] args) {
        String[] arr1={"百","十","万","千","百","十","元"};
//1.输入字符串
        Scanner sc=new Scanner(System.in);
        int cush;
        while(true){


            cush=sc.nextInt();
            if(cush>0&&cush<9999999){break;}
           else{
                System.out.println("输入金额无效");
            }
 }
//1.1创建一个表,将数字对应其索引
        String result = ""; // 初始化结果字符串

        while (true) {
            int number = cush % 10; // 取末尾数字
            String num = capital(number); // 转换为文字

            result = num + result; // 将转换后的文字添加到结果的开头


            cush = cush / 10; // 去掉末尾数字

            if (cush == 0) {
                break; // 如果数字已经转换完毕,跳出循环
            }
        }
//判断缺多少个零,在字符串前面加上
        int count=7-result.length();
        for(int i=0;i<count;i++){
            result="零"+result;
        }
//打印结果
        for (int i = 0; i < arr1.length; i++) {
            char c=result.charAt(i);
            System.out.print(c);
            System.out.print(arr1[i]);
        }



    }


    public static String capital(int number) {
        String[] arr = {"零", "壹", "贰", "弎", "四", "伍", "六", "七", "八", "九", "十"};
        return arr[number];
    }



}

输出结果:

错误提醒:

int count=7-result.length();

        for(int i=0;i<count;i++){
            result="零"+result;

        }与
        for(int i=0;i<7-result.length();i++){
            result="零"+result;

        }输出零的结果为什么不一样

i<7-result.length()随result.length字符串的增长,i的范围逐渐减小,故输出的零的个数不对    

练习六:转换罗马数字

代码实现


import java.util.Scanner;

public class StringTomrs {
    public static void main(String[] args) {
int num;
//1.输入字符串
        Scanner sc = new Scanner(System.in);
String sentence;
        while(true){
            sentence = sc.next();
            boolean flag=string(sentence);
            if(flag==true){
                System.out.println("输入正确");
                break;
            }else{
                System.out.println("输入错误,请重新输入");
                continue;

            }
        }
        //2.将内容转变为字符串
        for(int i=0;i<sentence.length();i++){
            char c=sentence.charAt(i);
            num=c-48;//ASCII
            String result=turninto(num);
            System.out.print(result+" ");
        }


 }
 //判断输入的字符串是否合规
 public static boolean string(String sentence) {

     //1.长度《=9
     if (sentence.length() > 9 ) {
         return false;

     }
     for (int i = 0; i < sentence.length(); i++) {
         char c = sentence.charAt(i);
         //2.只能是数字
           if (c < '0' || c > '9') {

             return false;

         }
     }
     return true;

 }

 public static String turninto(int num){
        String[] arr={" ","I","II","III","Iv","V","VI","VII","VIII","IX"};
     return arr[num];
 }

}

易错点

  • 长度判断:条件应为 sentence.length() > 9 || sentence.length() <= 0。原来的 sentence.length() < 0 永远不会成立,因为 length() 返回的是非负整数。

法二


import java.util.Scanner;

public class StringTomrs {
    public static void main(String[] args) {
int num;
//1.输入字符串
        Scanner sc = new Scanner(System.in);
String sentence;
        while(true){
            sentence = sc.next();
            boolean flag=string(sentence);
            if(flag==true){
                System.out.println("输入正确");
                break;
            }else{
                System.out.println("输入错误,请重新输入");
                continue;

            }
        }
        //2.将内容转变为字符串
        for(int i=0;i<sentence.length();i++){
            char c=sentence.charAt(i);

            String result=turninto(c);
            System.out.print(result+" ");
        }


 }
 //判断输入的字符串是否合规
 public static boolean string(String sentence) {

     //1.长度《=9
     if (sentence.length() > 9 ) {
         return false;

     }
     for (int i = 0; i < sentence.length(); i++) {
         char c = sentence.charAt(i);
         //2.只能是数字
           if (c < '0' || c > '9') {

             return false;

         }
     }
     return true;

 }

 public static String turninto(char num){
String str;
        switch(num){
            case'0'->str=" ";
            case'1'->str="I";
            case'2'->str="II";
            case'3'->str="III";
            case'4'->str="VI";
            case'5'->str="V";
            case'6'->str="VI";
            case'7'->str="vII";
            case'8'->str="VX";
            default->str=" ";
     }
     return str;
 }

}

练习七:
输入任意字符串,打乱其顺序


import java.util.Random;
import java.util.Scanner;

public class StringTomrs {
    //输入任意字符串,打乱其顺序

    public static void main(String[] args) {
        String str="1234546";
        char[]arr=new char[str.length()];
  //打乱顺序
        //1.使用subString
        //2.将其转换为字符数组
        arr=turnchar(str,arr);

        //3.打乱顺序
        arr=mix(arr);
        //4.将字符数组转化为字符串
        String string=new String(arr);
        System.out.println(string);


     }
    //2.将其转换为字符数组
    public static char[] turnchar(String str,char[]arr){

        for (int i = 0; i < arr.length; i++) {
            arr[i]=str.charAt(i);
        }
        return arr;
    }
//3.打乱顺序
    public static char[] mix(char[]arr){
        Random rand=new Random();
        char temp;
        for (int i = 0; i < arr.length-1; i++) {
            int suijizhi=rand.nextInt(arr.length);
            temp=arr[i];
            arr[i]=arr[suijizhi];
            arr[suijizhi]=temp;
        }
        return arr;
    }

}

法二

import java.util.Random;

public class StringTomrs {

    public static void main(String[] args) {
        String str = "1234546";

        // 将字符串转换为字符数组
        char[] arr = str.toCharArray();

        // 打乱顺序
        arr = mix(arr);

        // 将字符数组转换为字符串
        String shuffledString = new String(arr);

        System.out.println(shuffledString);
    }

    // 打乱顺序
    public static char[] mix(char[] arr) {
        Random rand = new Random();
        for (int i = arr.length - 1; i > 0; i--) {
            int index = rand.nextInt(i + 1); // 生成 0 到 i 之间的随机数
            // 交换 arr[i] 和 arr[index]
            char temp = arr[index];
            arr[index] = arr[i];
            arr[i] = temp;
        }
        return arr;
    }
}

输出结果哦

练习八:生成验证码

代码实现:

import java.util.Random;

public class StringTomrs {

    public static void main(String[] args) {
        Random rand = new Random();
        //1.将所有大写小写字符都存放在一个数组中
        char[] arr = new char[52];
        arr = capital(arr);
        //2.随机获取4个字符并拼接成zifuchuan
        String str = "";
        for (int i = 0; i < 4; i++) {
            int num = rand.nextInt(arr.length);
            str += arr[num];
        }
        // 2.将数字拼接在字符串后面并输出
        int num = rand.nextInt(10);
        str += num;
        System.out.println(str);
//3.将其转换为字符数组
char[]arr1=new char[str.length()];
for(int i=0;i<str.length();i++){
    arr1[i]=str.charAt(i);
}
//  4.打乱数数组的位置
        //1.subString//2.for循环//3.
        Random ran = new Random();
        for (int i = arr1.length - 1; i > 0; i--) {
            int j = rand.nextInt(i + 1); // 生成 [0, i] 之间的随机数
            // 交换 arr[i] 和 arr[j]
            char temp = arr1[i];
            arr1[i] = arr1[j];
            arr1[j] = temp;
        }
        String str1=new String(arr1);
        System.out.println(str1);
    }


    //1.将所有大写小写字符都存放在一个数组中
    public static char[] capital(char[]arr){
        int index=0;
        for(char i='a';i<'z';i++){
            arr[index++]=i;
        }
        for(char i='A';i<'Z';i++){
            arr[index++]=i;
        }
        return arr;
    }

}
代码优化
import java.util.Random;

public class StringTomrs {

    public static void main(String[] args) {
        Random rand = new Random();

        // 1. 将所有大写小写字符都存放在一个数组中
        char[] arr = new char[52];
        arr = capital(arr);

        // 2. 随机获取4个字符并拼接一个数字
        StringBuilder str = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            int num = rand.nextInt(arr.length);
            str.append(arr[num]);
        }
        int num = rand.nextInt(10);
        str.append(num);
        System.out.println("随机获取的4个字符和一个数字:" + str.toString());

        // 3. 随机访问5个字符
        StringBuilder str1 = new StringBuilder();
        for (int i = 0; i < 5; i++) {
            int index = rand.nextInt(str.length());
            str1.append(str.charAt(index));
        }
        System.out.println("随机访问的5个字符:" + str1.toString());
    }

    // 将所有大写小写字符都存放在一个数组中
    public static char[] capital(char[] arr) {
        int index = 0;
        for (char i = 'a'; i <= 'z'; i++) {
            arr[index++] = i;
        }
        for (char i = 'A'; i <= 'Z'; i++) {
            arr[index++] = i;
        }
        return arr;
    }
}
修改说明:
大写字母的循环:在 capital 方法中,修正了大写字母部分的循环条件,确保包含 'z' 和 'Z'。
StringBuilder 的使用:使用 StringBuilder 替代字符串连接操作,以提升效率和性能。
随机访问的优化:在随机访问5个字符的部分,使用 StringBuilder 和随机索引来避免重复选择,确保5个字符顺序不同。
这样的修改可以提高代码的效率和可读性,并解决了原始代码中可能会出现的问题。

输出结果:

练习九:将字符串转化为数组


public class Solution {
    //将字符串转化为整数
    public static void main(String[] args) {
        int sum=0;
        char[] arr = new char[9];
        String str=new String("123456789");
        for(int i=0;i<str.length();i++){
            arr[i]=str.charAt(i);
        }
        int[]arr1=new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            arr1[i]=(int)(arr[i]-48);
        }
        for (int i = 0; i < arr1.length-1; i++) {
            for(int j=0;j<arr1.length-1-i;j++){
                arr1[j]=arr1[j]*10;
            }
        }
        for (int i = 0; i < arr1.length; i++) {
            sum+=arr1[i];
        }
        System.out.println(sum);
    }
}

输出结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1976845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用FastChat快速部署LLM服务

原文&#xff1a;https://zhuanlan.zhihu.com/p/705915093 FastChat 是一个用于训练、服务和评估基于LLM的聊天机器人的开放平台&#xff0c;它的核心功能包括&#xff1a; 最先进模型&#xff08;例如 Vicuna、MT-Bench&#xff09;的训练和评估代码。具有 Web UI 和与 Open…

<Rust>使用rust实现crc16_modbus校验码生成?

前言 本文是使用rust代码来实现crc16 modbus校验码的输出。 概述 crc16 modbus算法简介: 代码实现: crc16 modbus是crc校验码的其中一种计算方式,通常用于modbus类通讯的数据校验上。 其计算步骤如上面的图片所示,通常此校验算法用在工控行业比较多,如一些支持串口通讯…

Linux驱动----总线

总线相关 总线注册和注销总线device对象----描述设备信息&#xff0c;包括地址&#xff0c;中断号和其他的一些自定义数据注册和注销device对象----指将device注册到mybus总线 driver对象----描述设备驱动的方法&#xff08;操作地址和中断&#xff09;注册和注销driver对象---…

38 器件移动、旋转、镜像、对齐、等间距操作介绍39 器件、网络、过孔锁定与解锁操作40 相同模块复用操作41 测量、查询功能介绍

38 器件移动、旋转、镜像、对齐、等间距操作介绍&&39 器件、网络、过孔锁定与解锁操作&&40 相同模块复用操作&& 41 测量、查询功能介绍 第一部分 38 器件移动、旋转、镜像、对齐、等间距操作介绍第二部分 39 器件、网络、过孔锁定与解锁操作第三部分 4…

明确工作目标学习稿:计算技术体系的发展方向

学习2022年《孙凝晖&#xff1a;建立高水平自立自强的计算技术新体系》 计算所新时期的目标就是要建立高水平自立自强的计算技术新体系&#xff0c;其中&#xff0c;针对处理器提出“C体系”、针对信息基础设施提出“信息高铁”体系。 计算技术体系的新结构 包含C体系、信息高…

自建数据库VS云数据库

自建数据库VS云数据库 什么是自建数据库&#xff1f;自建数据库方案自建数据库的优点自建数据库的缺点什么是云数据库&#xff1f;自建数据库的缺点什么是云数据库&#xff1f; 云数据库方案云数据库的优点云数据库的缺点适用场景比较总结 【纪录片】中国数据库前世今生 在数字…

日志采集格式指定实验

目录 一. 进入配置文件&#xff0c;有两种方式指定采集格式 &#xff08;1&#xff09;日志默认格式指定 &#xff08;2&#xff09;指定用liu的格式采集某一个日志 二.重启服务 三.测试 #WESTOS_FORMAT&#xff1a; 格式名称 #%FROMHOST-IP%&#xff1a; 日志来源主…

合作开发中的Simulink算法保护

项目越来越大&#xff0c;分工越来越细&#xff0c;合作开发已经成为常态。在几家公司或者几个团队合作开发同一个项目的时候&#xff0c;经常会出现互相之间技术上要做一些保密工作&#xff0c;一方做的模型或代码不能给另一方看到&#xff0c;但又要求可以让对方能够运行自己…

File类的用法

目录 File的常见方法 普通文件的创建 普通文件的删除 deleteOnExit 目录的创建 mkdir mkdirs 文件的重命名和剪切 剪切 重命名 InputStream read() OutputStream write() Reader Writer write(String str) 代码练习 扫描指定⽬录&#xff0c;并找到名称中包含…

git clone private repo

Create personal access token Clone repo $ git clone https://<user_name>:<personal_access_tokens>github.com/<user_name>/<repo_name>.git

【DOCKER】VNC可视化UBUNTU容器

1. 启动测试容器 # 启动容器 # -e USERu20 vncserver所需环境变量 # -p 15901:5901 vncserver所需端口 docker run -id --privilegedtrue --restart always --useru20 --workdir/home/u20 -p 15901:5901 -e USERu20 --name ui u20:dev# 进入容器 docker exec -it ui /bin/ba…

jupyter支持跨机器远程访问

1. 远程访问场景 本地往往缺少GPU设备&#xff0c;为了让我们的代码能在有GPU设备的机器上运行&#xff0c;就需要在远程机器上启动jupyter notebook, 这意味着我们要在本地机器的浏览器上访问远程机器上的jupyter notebook。但是直接按ip访问会报如下错误&#xff1a; 因为ju…

MATLAB优化模型(3)

一、前言 在MATLAB中处理各种优化问题&#xff0c;如背包问题、指派问题&#xff08;也称为分配问题&#xff09;、抽屉原理应用、旅行商问题&#xff08;TSP&#xff09;以及排队论模型&#xff0c;通常需要结合MATLAB的优化工具箱&#xff08;如Optimization Toolbox&#xf…

C++ | 动态内存管理 new、delete (用法、底层)详解

目录 简单回顾C语言动态内存管理 new、delete的用法 内置类型 new delete 自定义类型 new、delete底层讲解&#xff08;重要&#xff09; operator new 与 operator delete 定位 new 结语 简单回顾C语言动态内存管理 在C语言的学习阶段 我们接触到了三个能在堆上开辟…

vulhub靶场之wordpress关卡(保姆级教程)

一.打开wordpress关卡 1.选择简体中文 然后添加信息 点击安装wordpress 1.2 登陆后台 1.3 在后台修改模板 1.4 找一个php文件&#xff0c;在最开头加入一句话木马 点击更新 然后访问默认模板路径 下面的是默认的模板路径 /wp-content/themes/twentyfifteen/404.php 然后…

JAVA基础 - 数据库编程

目录 一. 简介 二. 数据持久化 三. 安装MySQL 四. JDBC API 五. 三个重要接口 一. 简介 数据库编程是指使用编程语言与数据库进行交互&#xff0c;以实现数据的存储、检索、更新、删除等操作。 在数据库编程中&#xff0c;常见的任务包括&#xff1a; 连接数据库&#x…

Spring统一返回类型中关于String的问题

文章目录 1. 问题铺垫2. 解决方法3. 问题分析4 解决方法解释 1. 问题铺垫 首先设置了以下代码统一处理返回类型 ControllerAdvice public class ResponseAdvice implements ResponseBodyAdvice {Overridepublic boolean supports(MethodParameter returnType, Class converte…

GuLi商城-新增商品-获取分类下所有分组以及属性

/*** 根据分类id查询出所有的分组以及这些组里面的属性* @param catelogId* @return*/ @Override public List<AttrGroupWithAttrsVo> getAttrGroupWithAttrsByCatelogId(Long catelogId) {//1、查询分组信息List<AttrGroupEntity> attrGroupEntities = this.list(…

SwiftUI 中掌握 ScrollView 的使用:滚动可见性

文章目录 前言视图修饰符应用场景可见性完整示例ContentViewVideoPlayerViewScrollViewVisibilityApp 总结 前言 我们的滚动 API 中又有一个重要的新增功能&#xff1a;滚动可见性。现在&#xff0c;你可以获取可见标识符列表&#xff0c;或者快速检查并监控 ScrollView 内视图…

一文彻底搞懂 Fine-tuning - 超参数(Hyperparameter)

最近这一两周看到不少互联网公司都已经开始秋招提前批了。不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些球友解…