当前位置: 首页 > news >正文

Java字符串操作实战指南

实验项目二  基于字符串的专项实验

一、实验目的

1、掌握字符串的多种创建方式,理解不同创建方式在内存中的存储差异;

2、熟练运用字符串的常见方法(如截取、查找、替换等),掌握字符串操作的核心技巧;

3、深入理解字符串的底层实现原理(如不可变性、常量池等),提升代码优化能力。

二、实验内容与步骤

2.1 验证性实验

1、调试下面的程序,分析程序的功能和运行结果并添加代码注释。

import java.util.Scanner;

public class LetterCount {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入一个字符串:");

        String str = scanner.nextLine();

        int count = 0;

        for (int i = 0; i < str.length(); i++) {

            char c = str.charAt(i);

            if (Character.isLetter(c)) { // 判断是否为字母

                count++;

            }

        }

        System.out.println("字符串中字母的个数为:" + count);

        scanner.close();

    }

}

2、调试下面的程序,并分析程序的功能和运行结果并添加代码注释。

public class EmailHandler {

    public static void main(String[] args) {

        String email = "zhangmj@zparkhr.com";

        int atIndex = email.indexOf('@');

        if (atIndex != -1) {

            String username = email.substring(0, atIndex);

            System.out.println("邮箱用户名:" + username);

        } else {

            System.out.println("邮箱格式错误,无@符号");

        }

        

        boolean hasAt = email.contains("@");

        boolean hasDot = email.contains(".");

        int lastDotIndex = email.lastIndexOf('.');

        boolean isDotAfterAt = hasAt && hasDot && (lastDotIndex > atIndex);

        

        if (hasAt && hasDot && isDotAfterAt) {

            System.out.println("邮箱格式合法");

        } else {

            System.out.println("邮箱格式不合法");

        }

    }

}

3、调试下面的程序,并分析程序的功能和运行结果并添加代码注释。

import java.util.Random;

public class RandomCharPicker {

    public static void main(String[] args) {

        String source = "ABCDEFGhijklmn1234567";

        Random random = new Random();

        StringBuilder sb = new StringBuilder();

        

        for (int i = 0; i < 4; i++) {

            // 生成0到字符串长度-1的随机索引

            int index = random.nextInt(source.length());

            char c = source.charAt(index);

            sb.append(c); // 拼接字符

        }

        

        System.out.println("随机拼接的字符串:" + sb.toString());

    }

}

4、调试下面的程序,并分析程序的功能和运行结果并添加代码注释。

import java.util.Scanner;

public class StringReverse {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入一个字符串:");

        String str = scanner.nextLine();

        StringBuilder sb = new StringBuilder(str);

        String reversedStr = sb.reverse().toString(); // 利用StringBuilder的reverse方法

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

        scanner.close();

    }

}

5、调试下面的程序,并分析程序的功能和运行结果并添加代码注释。

public class DigitCount {

    public static void main(String[] args) {

        String digitStr = "1239586838923173478943890234092";

        int[] counts = new int[10]; // 索引0-9对应数字0-9的次数

        or (int i = 0; i < digitStr.length(); i++) {

            char c = digitStr.charAt(i);

            int digit = c - '0';

            counts[digit]++;

        }

        

        for (int i = 0; i < counts.length; i++) {

            System.out.println("数字" + i + "出现的次数:" + counts[i]);

        }

    }

}

6、调试下面的程序,并分析程序的功能和运行结果并添加代码注释。

import java.util.Scanner;

public class CharReplace {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入字符串:");

        String str = scanner.nextLine();

        System.out.print("请输入要替换的字符:");

        char oldChar = scanner.next().charAt(0);

        System.out.print("请输入替换后的字符:");

        char newChar = scanner.next().charAt(0);

        

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < str.length(); i++) {

            char c = str.charAt(i);

            if (c == oldChar) {

                sb.append(newChar);

            } else {

                sb.append(c);

            }

        }

        

        System.out.println("替换后的字符串:" + sb.toString());

        scanner.close();

    }

}

2.2 自主设计性实验

7、编程字符串中单词个数统计。要求:输入一个英文句子(单词之间用空格分隔,标点符号与单词相连,如 “Hello, world! This is a test.”),统计句子中单词的个数(忽略标点符号,仅以空格分隔判断单词)。

提示:可先去除字符串中的标点符号,再以空格分割字符串,统计非空元素的个数。

      Scanner输入中 nextLine() 方法可以接受输入空格!

8、编程实现手机号格式校验与处理。要求:设计程序实现手机号的格式校验,规则如下:

(1)长度为 11 位;

(2)以 1 开头;

(3)第二位为 3、4、5、7、8 中的一个。

校验通过后,将号码中间 4 位替换为 “xxxx”(如 “13812345678” 处理为 “138xxx5678”)。

9、编程实现字符串中最长连续相同字符统计。要求:输入一个字符串,找出其中最长的连续相同字符及其长度。例如,字符串 “aabbbccddddd” 中,最长连续字符为 “d”,长度为 5。

10、编程实现两个字符串的公共前缀查找。要求:输入两个字符串,查找它们的最长公共前缀。例如,“flower” 和 “flow” 的公共前缀为 “flow”;“dog” 和 “racecar” 的公共前缀为 “”(空字符串)。

11、编程实现密码强度检测。要求:设计程序检测密码强度,规则如下:

(1)长度≥8 位;

(2)包含大小写字母、数字、特殊符号(如!@#$%)中的至少三种;

满足以上条件为 “强密码”,仅满足(1)为 “中密码”,否则为 “弱密码”。输入密码后,输出对应的强度等级。

12、编程实现字符串编码转换。要求:实现字符串的简单编码转换,规则为:将每个字符的 ASCII 值加 3 后转换为新字符(如 'a'→'d','5'→'8'),编码后的字符串需保留原字符串的长度和格式。编写解码方法,将编码后的字符串还原为原字符串。

三、实验设备(材料)

3.1 计算机设备

操作系统:建议使用 Windows或 macOS 等主流操作系统,确保系统稳定且已安装 Java 开发环境(JDK),JDK 版本建议为Java8、Java 17 或Java 21。

处理器:具备基本的计算处理能力,能够流畅运行 Java 程序。一般来说,普通的笔记本电脑或台式机处理器均可满足需求,如英特尔酷睿系列或 AMD 锐龙系列处理器。

内存:至少 8GB 及以上的内存,以保证在编译和运行 Java 程序时系统不会因内存不足而出现卡顿或异常。

3.2 开发工具

集成开发环境(IDE):推荐使用 IntelliJ IDEA专业的 Java 开发工具,这些 IDE 提供了代码编辑、编译、调试等功能,能够极大地提高开发效率。当然,也可以使用简单的文本编辑器(如 Notepad++、Sublime Text 等)结合命令行工具进行 Java 开发,但对开发者的要求相对较高。

Java 开发工具包(JDK):作为 Java 开发的核心工具包,包含了 Java 编译器(javac)、Java 运行时环境(JRE)等必要的工具和库。确保 JDK 已正确安装并配置好环境变量,以便在命令行或 IDE 中能够正常使用 Java 相关命令。

3.3 其他辅助工具

文档编辑器:用于记录实验过程、回答思考题等,如 Microsoft Word、WPS 文字处理软件等。

截图工具:用于截取程序代码和运行结果图。

四、实验注意事项

4.1 代码编写规范

严格遵循 Java 的命名规范,类名、方法名、变量名等应具有明确的含义,采用驼峰命名法,增强代码的可读性。例如,类名首字母大写,方法名和变量名首字母小写。

注意代码的缩进和排版,保持代码的整洁和美观。一般来说,使用 4 个空格或一个制表符进行缩进,使代码结构清晰,易于理解和维护。

合理添加注释,对关键代码、复杂逻辑或重要步骤进行详细解释,方便自己和他人阅读代码。注释可以使用单行注释(//)或多行注释(/* ... */)。

4.2 输入输出处理

在读取输入时,要注意处理可能出现的异常情况,如输入格式错误、输入数据超出范围等。可以使用异常处理机制(try-catch 语句)来捕获和处理这些异常,避免程序因输入错误而崩溃。

输出结果时,要严格按照实验要求的格式进行输出,包括换行符、空格等的使用。例如,本题要求每个名字占一行输出,务必确保输出格式正确,否则可能导致测试不通过。

4.3 编译与运行

在编译 Java 程序之前,确保代码中没有语法错误。可以使用 IDE 提供的语法检查功能或通过命令行使用javac命令进行编译。如果编译过程中出现错误,仔细阅读错误信息,定位并修正代码中的问题。

运行程序时,要注意程序的运行环境和输入数据的正确性。可以使用不同的测试用例进行测试,确保程序在各种情况下都能正常运行并得到正确的结果。

4.4 资源管理

在使用Scanner等资源时,要注意及时关闭资源,避免资源泄漏。可以在程序结束时调用scanner.close()方法关闭Scanner对象。

对于使用的其他资源(如文件、网络连接等),同样要遵循资源管理的原则,在不再使用时及时释放资源,保证程序的性能和稳定性。

4.5 实验记录与提交

在实验过程中,要认真记录实验步骤、遇到的问题及解决方法等关键信息。这些记录有助于自己回顾和总结实验过程。

实验成果提交要确保代码截图清晰、源码规范,并对实验结果进行详细的分析和总结。

五、思考题

1、字符串的==与equals方法有什么区别?为什么String类要重写equals方法?结合字符串常量池分析以下代码的输出结果:

String s1 = "abc";

String s2 = new String("abc");

String s3 = s2.intern(); // 从串池中获取字符串

System.out.println(s1 == s2);

System.out.println(s1 == s3);

  1. 简述String、StringBuilder和StringBuffer的区别?
  2. 字符串的不可变性有什么优点?在需要频繁修改字符串的场景下,如何避免因不可变性导致的性能问题?

4、分析以下代码的执行效率,说明原因并给出优化方案:

String str = "";

for (int i = 0; i < 10000; i++) {

    str += i;

}

http://www.dtcms.com/a/423787.html

相关文章:

  • EtherCAT:工业控制的高速神经网
  • LoRA 高效微调大语言模型全流程:从原理、实践到参数调优
  • 家纺行业英文网站模板腾讯云域名购买
  • 下一代固态硬盘引入HBM缓存技术的深度可行性分析
  • 企业网站加视频自己制作logo的软件
  • 深圳品牌网站建设公司招聘wordpress后台链接
  • 【DeepSeek 论文精读】13. DeepSeek-V3.2-Exp 技术报告与部署实践
  • 一文详解LLM Agent
  • 京东商品 SKU 信息接口技术干货:数据拉取、规格解析与字段治理(附踩坑总结 + 可运行代码
  • 深入浅出:C++ 链表完全指南
  • NumPy 与 Pandas 的详细应用(含实例)
  • 2345浏览器网页版入口中文版合肥seo优化公司
  • 网站建设报价包括哪些学校网站建设电话
  • 音视频编解码全流程之用Extractor后Muxer生成MP4
  • 高德地图实现经纬度及获取编码、所属行政区、GIS
  • wordpress 扁平化新站seo快速排名 排名
  • 2025年在招投标及竞品信息采集机器人领域,主流RPA全面解析
  • 电子商务网站建设与管理期末考试网站开发方案案例
  • Node.js命令行工具开发
  • 《面向物理交互任务的触觉传感阵列仿真》2020AIM论文解读
  • 未来最紧缺的十大专业seo优化师
  • OCP证书考试难度怎么样?
  • Vue3 defineModel === 实现原理
  • 唐山营销型网站建设2023新闻头条最新消息今天
  • 计算机网络---传输层
  • 如何在阿里云上做网站制作软件的手机软件
  • 深入理解 Java 虚拟机:从原理到实践的全方位剖析
  • 网站谷歌seo做哪些凌点视频素材网
  • 手机app应用网站C语言做网站需要创建窗口吗
  • uniapp 安卓FTP上传下载操作原生插件