这次是完成一些小任务来试试身手,免得生疏:
编写程序,使用charAt和length方法,将字符串"HelloWorld"拆分为"Hello"和"World"两个子串并输出。
设计一个方法,利用indexOf和lastlndexOf,查找字符串中某个字符最后一次出现的位置,若不存在则返回-1。
使用substring方法,截取邮箱地址(如"user@example.com")中的用户名部分(即"@"之前的内容)。编写程序,通过startsWith和endsWith方法判断一个文件名称(如"document.txt")是否是文本文件(以".txt"结尾)。
利用toLowerCase和toUpperCase方法,将字符串"AbCdEfG"转换为全小写和全大写两种形式并输出。
设计方法,使用trim和isEmpty处理用户输入的字符串,去除首尾空格后判断是否为空字符串。
使用replace(或replaceAll方法,将字符串中的所有数字字符替换为"",例如"a1b2c3"转换为"abc"。编写程序,通过split方法将CSV格式字符串(如"张三,20,男")拆分为数组并分别输出各元素。
利用equals和equalslgnoreCase比较两个字符串是否相等,区分大小写和不区分大小写两种情况。
设计一个方法,结合contains和substring,判断字符串是否包含指定子串,若包含则返回该子串首次出现的完整前后内容
任务一:Test01 字符串基础操作
1. 拆分字符串(test_a)
public void test_a(){String hello = str.substring(0, 5);String world = str.substring(5);System.out.println("拆分结果:"+hello+"和"+world);
}
执行结果:
拆分结果:Hello和World
关键点解析:
substring(0, 5)
:截取索引0到4的字符(不包括索引5)substring(5)
:从索引5开始截取到字符串末尾- 索引位置:H(0), e(1), l(2), l(3), o(4), W(5), o(6), r(7), l(8), d(9)
2. 查找字符最后位置(test_b)
public void test_b(){System.out.println("查找的随机字母是" + randomString);System.out.println(randomString+"最后出现位置: " + lastCharPosition("HelloWorld", randomString));
}public static int lastCharPosition(String s, String c) {if (s.indexOf(c) == -1) {return -1;}else {return s.lastIndexOf(c);}
}
执行结果示例:
查找的随机字母是o
o最后出现位置: 6
关键点解析:
indexOf()
:检查字符是否存在lastIndexOf()
:返回字符最后出现的位置- 返回-1表示字符不存在
3. 提取邮箱用户名(test_c)
public void test_c(){int atIndex = email.indexOf('@');if (atIndex != -1) {System.out.println("用户名: " + email.substring(0, atIndex));}
}
执行结果:
用户名: user
关键点解析:
indexOf('@')
:查找@符号的位置substring(0, atIndex)
:截取从0到@符号前的字符串
任务二:Test02 字符串高级操作
1. 判断文本文件(test_a)
public void test_a() {if (fileName.toLowerCase().startsWith("document") && fileName.toLowerCase().endsWith(".txt")) {System.out.println(fileName + " 是一个文本文件。");} else {System.out.println(fileName + " 不是一个文本文件。");}
}
执行结果:
document.txt 是一个文本文件。
关键点解析:
startsWith()
:检查字符串开头endsWith()
:检查字符串结尾toLowerCase()
:统一大小写处理
2. 大小写转换(test_b)
public void test_b() {System.out.println("全小写: " + str.toLowerCase());System.out.println("全大写: " + str.toUpperCase());
}
执行结果:
全小写: abcdefg
全大写: ABCDEFG
3. 处理用户输入(test_c)
public void test_c() {System.out.print("请输入字符串: ");String userInput = scanner.nextLine();String trimmedInput = userInput.trim();if (trimmedInput.isEmpty()) {System.out.println("去除首尾空格后字符串为空。");} else {System.out.println("去除首尾空格后的字符串为: \"" + trimmedInput + "\"");}
}
执行结果示例:
请输入字符串: Hello World
去除首尾空格后的字符串为: "Hello World"
4. 替换数字字符(test_d)
public void test_d() {String replacedString = numberString.replaceAll("\\d", "");System.out.println("替换数字后的字符串为: " + replacedString);
}
执行结果:
替换数字后的字符串为: abc
关键点解析:
replaceAll("\\d", "")
:正则表达式匹配所有数字并替换为空\\d
:正则表达式匹配数字字符
任务三:Test03 字符串应用实践
1. 拆分CSV数据(test_a)
public void test_a(){String csvString = "张三,20,男";String[] elements = csvString.split(",");for (String element : elements) {System.out.println(element);}
}
执行结果:
张三
20
男
关键点解析:
split(",")
:使用中文逗号作为分隔符- 返回字符串数组
2. 字符串比较(test_b)
public void test_b(){String str1 = "Hello";String str2 = "hello";System.out.println("str1 等于 str2 (区分大小写): " + str1.equals(str2));System.out.println("str1 等于 str2 (不区分大小写): " + str1.equalsIgnoreCase(str2));
}
执行结果:
str1 等于 str2 (区分大小写): false
str1 等于 str2 (不区分大小写): true
3. 子串上下文提取(test_c)
public void test_c(){String text = "这是一个测试字符串,用于测试子串出现的完整前后内容。";String subString = "测试";String result = findSubstringWithContext(text, subString);System.out.println("包含子串的完整前后内容: " + result);
}public static String findSubstringWithContext(String text, String subString) {if (text.contains(subString)) {int startIndex = text.indexOf(subString);int endIndex = startIndex + subString.length();System.out.println("子串开始索引: " + startIndex);System.out.println("子串结束索引: " + endIndex);return text.substring(0, endIndex);}return "子串未找到";
}
执行结果:
子串开始索引: 3
子串结束索引: 5
包含子串的完整前后内容: 这是一个测试
关键点解析:
contains()
:检查子串是否存在indexOf()
:获取子串起始位置substring(0, endIndex)
:截取从开始到子串结束的内容
contains 和 substring 方法深度解析
1. contains 方法详解
方法签名:
public boolean contains(CharSequence s)
工作原理:
- 检查字符串是否包含指定字符序列
- 底层调用
indexOf()
方法 - 返回
true
如果找到子串,否则false
使用示例:
String str = "Hello World";
System.out.println(str.contains("World")); // true
System.out.println(str.contains("world")); // false (大小写敏感)
2. substring 方法详解
方法签名:
public String substring(int beginIndex)
public String substring(int beginIndex, int endIndex)
参数说明:
beginIndex
:起始索引(包含)endIndex
:结束索引(不包含)
使用示例:
String str = "HelloWorld";
System.out.println(str.substring(5)); // "World"
System.out.println(str.substring(0, 5)); // "Hello"
3. contains 和 substring 结合使用
优化后的子串上下文提取方法:
public static String getSubstringContext(String text, String sub) {if (!text.contains(sub)) {return "未找到子串";}int start = text.indexOf(sub);int end = start + sub.length();String before = (start > 0) ? text.substring(0, start) : "";String after = (end < text.length()) ? text.substring(end) : "";return "前文: \"" + before + "\", 子串: \"" + sub + "\", 后文: \"" + after + "\"";
}
测试结果:
String text = "这是一个测试字符串,用于测试子串出现的完整前后内容。";
String subString = "测试";
System.out.println(getSubstringContext(text, subString));
输出:
前文: "这是一个", 子串: "测试", 后文: "字符串,用于测试子串出现的完整前后内容。"
完整代码整合
public class StringOperationsTutorial {public static void main(String[] args) {// 任务一:基础操作testTask1();// 任务二:高级操作testTask2();// 任务三:应用实践testTask3();}// 任务一实现public static void testTask1() {System.out.println("===== 任务一:字符串基础操作 =====");// 1. 拆分字符串String str = "HelloWorld";String hello = str.substring(0, 5);String world = str.substring(5);System.out.println("拆分结果: " + hello + " 和 " + world);// 2. 查找字符最后位置char searchChar = 'o';int lastPos = lastCharPosition(str, searchChar);System.out.println("字符 '" + searchChar + "' 最后出现位置: " + lastPos);// 3. 提取邮箱用户名String email = "user@example.com";int atIndex = email.indexOf('@');if (atIndex != -1) {System.out.println("邮箱用户名: " + email.substring(0, atIndex));}}public static int lastCharPosition(String s, char c) {return s.lastIndexOf(c);}// 任务二实现public static void testTask2() {System.out.println("\n===== 任务二:字符串高级操作 =====");// 1. 判断文本文件String fileName = "document.txt";if (fileName.endsWith(".txt")) {System.out.println(fileName + " 是文本文件");} else {System.out.println(fileName + " 不是文本文件");}// 2. 大小写转换String mixedCase = "AbCdEfG";System.out.println("全小写: " + mixedCase.toLowerCase());System.out.println("全大写: " + mixedCase.toUpperCase());// 3. 处理用户输入String userInput = " Hello World ";String trimmed = userInput.trim();System.out.println("原始输入: '" + userInput + "'");System.out.println("去除空格: '" + trimmed + "'");System.out.println("是否为空: " + trimmed.isEmpty());// 4. 替换数字字符String withNumbers = "a1b2c3";String withoutNumbers = withNumbers.replaceAll("\\d", "");System.out.println("替换数字: " + withoutNumbers);}// 任务三实现public static void testTask3() {System.out.println("\n===== 任务三:字符串应用实践 =====");// 1. 拆分CSV数据String csv = "张三,20,男";String[] parts = csv.split(",");System.out.println("CSV拆分结果:");for (String part : parts) {System.out.println(part);}// 2. 字符串比较String str1 = "Java";String str2 = "java";System.out.println("区分大小写比较: " + str1.equals(str2));System.out.println("不区分大小写比较: " + str1.equalsIgnoreCase(str2));// 3. 子串上下文提取String text = "Java编程很有趣,Java是最好的编程语言之一";String sub = "Java";String context = getSubstringContext(text, sub);System.out.println("子串上下文: " + context);}public static String getSubstringContext(String text, String sub) {if (!text.contains(sub)) {return "未找到子串: \"" + sub + "\"";}int start = text.indexOf(sub);int end = start + sub.length();String before = (start > 0) ? text.substring(0, start) : "[开头]";String after = (end < text.length()) ? text.substring(end) : "[结尾]";return "前文: \"" + before + "\", 子串: \"" + sub + "\", 后文: \"" + after + "\"";}
}
执行结果预览
===== 任务一:字符串基础操作 =====
拆分结果: Hello 和 World
字符 'o' 最后出现位置: 6
邮箱用户名: user===== 任务二:字符串高级操作 =====
document.txt 是文本文件
全小写: abcdefg
全大写: ABCDEFG
原始输入: ' Hello World '
去除空格: 'Hello World'
是否为空: false
替换数字: abc===== 任务三:字符串应用实践 =====
CSV拆分结果:
张三
20
男
区分大小写比较: false
不区分大小写比较: true
子串上下文: 前文: "", 子串: "Java", 后文: "编程很有趣,Java是最好的编程语言之一"
关键知识点总结
- 字符串基础操作:
- 使用
substring()
进行字符串分割 - 使用
indexOf()
和lastIndexOf()
查找字符位置 - 邮箱用户名提取技巧
- 使用
- 字符串高级操作:
- 文件类型判断(
endsWith()
) - 大小写转换(
toLowerCase()
,toUpperCase()
) - 用户输入处理(
trim()
,isEmpty()
) - 正则表达式替换(
replaceAll()
)
- 文件类型判断(
- 字符串应用实践:
- CSV数据解析(
split()
) - 字符串比较(
equals()
,equalsIgnoreCase()
) - 子串上下文提取(
contains()
,indexOf()
,substring()
)
- CSV数据解析(
- contains 和 substring 深度应用:
- 检查子串存在性
- 定位子串位置
- 提取前后文内容
- 处理边界情况(开头、结尾)