Java——字符串类实验

本文介绍了如何使用Java编写一个名为CaseConverter的类,该类包含convert方法,用于将用户输入的句子中每个单词的首字母转换为大写,其余字母转为小写。实验中使用了Scanner的nextLine()方法获取句子,StringBuffer类创建新字符串,并讨论了字符串处理中的注意事项,如分割单词、判断字母、转换大小写以及使用StringBuffer的append方法。此外,还提到了测试类TestCaseConverter的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【任务一】:

实验要求:
能够根据业务的要求设计和定义类;能够根据业务的要求提取出和业务相关的属性和方法;能够使用定义的属性和
方法完成相应的业务要求;能够使用对象和对象之间的关系完成业务要求;能够将实际的问题描述转换成 Java程序。
实验任务:编写一个 Java 程序,将用户输入的句子当中每一个单词的第一个字母大写, 而单词中的其余字母小写。
要求:
1. 创建类 CaseConverter。
2. CaseConverter 具有方法 String convert(String value),用于返回转换大小写后的结果。
3. 写一个测试类来测试该程序,首先要求用户输入一个句子, 然后提取每一个单词,并将单词的首字母转换成大写,
其余字符小写。 最后输出新字符串。
提示:
1. 需要使用 Scanner的 nextLine()方法来获取一个句子。
2. 使用 StringBuffer类来创建替换过大小写的新字符串。
注意:
1. 单词的分割符除了空格之外,还可能有 Tab或者( ,;.等标点符号)。
2. 注意判断首字符是不是字母。
3. 单词中的其他字母可能为大写。
例如:当用户输入”Thisis a samPLe sentencE to demostrATE the TasK 2.”

 

实验步骤:

新建两个类——CaseConverter(实现功能)、TestCaseConverter(测试功能)

实验代码:

< CaseConverter.java>

public class CaseConverter {
	
	public static String[] words = new String[20];
	public static String convert(String value) {
		StringBuffer upAfter = new StringBuffer(value.length());
		char aCharacter;
		//将tab , ; .等标点符号替换成空格
		value = value.replaceAll("[\\pP‘’“”]", " ");
		words = value.split(" ");
		for (int i = 0;i < words.length; i++)
		{
			for(int j = 0;j < words[i].length(); j++) {
				aCharacter = words[i].charAt(j);
				if (j==0) {
					//判断是不是字母
					if(Character.isLetter(aCharacter)) {
						upAfter.append(Character.toUpperCase(aCharacter));
					}
					else {
						upAfter.append(words[i].charAt(j));
					}
				}
				else {
					//如果该字符是字母切是大写字母,则转小写,否则直接连接
					if(Character.isLetter(aCharacter) && Character.isUpperCase(aCharacter)) { 
			                upAfter.append(Character.toLowerCase(aCharacter)); 
					}
					else {
						upAfter.append(words[i].charAt(j));
					}
				}
			}
			upAfter.append(" ");
		}
		return new String(upAfter);
	}
}


< TestCaseConverter.java>

import java.util.Scanner;

public class TestStringEditor {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner scan = new Scanner(System.in);
		System.out.print("Input your string:");
		String inputString = scan.nextLine();
		scan.close();
		System.out.println("Your string after change:" + CaseConverter.convert(inputString));
		
	}

}


实验笔记:

1.      提取一句英语句子(字符串)中的单词,使用了String split()方法。

在java.lang包中有stringObj.split([separator,[limit]]) 方法,将一个字符串分割为子字符串,然后将结果作为字符串数组返回

stringObj  必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。 
separator 可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整

个字符串的单一元素数组。 

limit 可选项。该值用来限制返回数组中的元素个数

举个栗子:

String.split("\\.")用“.”作为分隔

String.split("\\|")用“|”作为分隔

String.split(" ", 2);  用“ ”作为分割,并且返回2个数组

由于在这个实验中,单词的分割符除了空格之外,还可能有 Tab或者( ,;.等标点符号),

所以先把所有的标点符号全部替换成空格,然后再通过split(" ")提取出单词。

在 JDK 6 以下的版本中可以这样:(用空格*正则替换字符串中的全椒、半角标点符号)

	value = value.replaceAll("[\\pP‘’“”]", " ");

2.      在遍历(二维)字符串数组的过程中,使用了length(),charAt()方法。

<think>嗯,用户需要总结Java中数组与字符串的实验关键点。从提供的参考资料看,用户已经积累了一些官方文档和实验心得,但需要系统性地提炼核心内容。用户可能正在完成课程实验报告或准备面试题,需要突出实操性强、易被忽视的细节(比如二维数组内存布局、字符串编码问题)。考虑到引用[1][3]都提到Java8+的新特性,这部分应该作为亮点重点呈现。资料里几个关键引用值得注意:-引用[1]强调字符串优化的四个维度(拼接/复用/静态文本/编码),特别是StringBuilder和String.intern()的实践-引用[2]提到二维数组底层实现,这和传统认知的"矩阵"结构不同-引用[4]展示的零值处理逻辑,暗示实验可能涉及边界值处理我决定按"数组-字符串-新特性"三层结构组织:1数组部分突出内存特性和常见陷阱(如length属性/length()方法的区别)2字符串重点解释不可变性原理引发的性能问题及解决方案3Java8~15新特性用对比表格可能更清晰,比如parallelSort()与sort()的适用场景差异需要警惕用户实验代码中可能存在的隐患点,比如引用[4]暴露的重复“零”值处理逻辑——这种边界情况在总结里要特别标注。另外所有代码示例必须保持最低兼容版本提示,避免用户在新版JDK测试时出错。</think> 以下是根据引用资料整理的Java数组与字符串实验总结关键点,涵盖基础操作、优化技巧和新特性: --- ### **一、数组操作核心要点** 1. **声明与初始化** - 一维数组:`int[] arr = new int[5];` 或 `int[] arr = {1,2,3};` - 二维数组:`int[][] matrix = new int[3][3];` 内存中实际存储**数组的数组**(非连续矩阵)[^2] ```java // 不规则二维数组示例 int[][] arr = {{1}, {2,3}, {4,5,6}}; ``` 2. **常用操作** - **排序** ```java Arrays.sort(arr); // 传统排序 Arrays.parallelSort(largeArray); // Java8+ 并行排序(大数据量优化)[^1] ``` - **流式处理**(Java8+) ```java int sum = Arrays.stream(arr).filter(x -> x > 0).sum(); // 正数求和[^1] ``` 3. **典型陷阱** - 数组长度属性:`arr.length`(**非方法**,区别于字符串的`length()`) - 数组越界:`ArrayIndexOutOfBoundsException` --- ### **二、字符串操作关键点** 1. **不可变性(Immutability)** - `String`对象创建后内容**不可修改**,拼接操作会生成新对象 - 实验重点:对比以下两种方式的性能差异 ```java String s = ""; for (int i=0; i<10000; i++) { s += i; // 生成大量临时对象(低效) } StringBuilder sb = new StringBuilder(); for (int i=0; i<10000; i++) { sb.append(i); // 单对象操作(高效)[^1] } ``` 2. **优化技巧** - **拼接优化**:优先用`StringBuilder`(可变)替代`+`操作[^1] - **重用对象**:对大量重复字符串使用`String.intern()`(放入字符串常量池)[^1] - **编码处理**:明确指定编码(如`new String(bytes, "UTF-8")`),避免平台默认编码导致乱码[^1] 3. **新特性**(Java8+) | 版本 | 方法示例 | 作用 | |------------|-----------------------------------|--------------------------| | **Java 8** | `String.join("-", "A","B")` | 用分隔符拼接字符串 | | **Java 11**| `" abc ".strip()` | 去除Unicode空白符 | | | `"Java".repeat(3)` | 重复字符串 | | | `"\n".isBlank()` | 检测是否空白 | | **Java 15**| 文本块:`"""<html>...</html>"""` | 多行字符串(无需转义)[^1] | --- ### **三、实验总结建议** 1. **性能对比实验** - 测试`String`拼接 vs `StringBuilder`在万次操作下的时间差 - 对比`Arrays.sort()`与`parallelSort()`对10万+数据的排序效率 2. **内存分析** - 通过`jvisualvm`监控字符串大量拼接时的内存变化 - 分析`intern()`方法对堆内存的影响 3. **边界处理** - 空数组/空字符串的防御性编程(如`if(arr != null && arr.length > 0)`) - 注意全角空格`strip()`与半角空格`trim()`的区别(引用[4]中零值处理逻辑)[^4] ```java // 引用[4]中零值处理逻辑优化示例 if (!hanArr[num].equals("零") || !result.endsWith("零")) { result.append(hanArr[num]); // 避免连续多个"零" } ``` --- **参考资源** - 数组操作:[Java Arrays官方文档](https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html) - 字符串处理:[Java String官方文档](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html) - 新特性指南:[Oracle Java SE新特性](https://www.oracle.com/java/technologies/javase/jdk-relnotes.html)[^1][^3] --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值