数组与字符串¶
📖 章节简介¶
本章将介绍Java的数组和字符串操作,包括数组的基本操作、String类的常用方法和StringBuilder的使用。
上图对比了数组操作与字符串处理的常见能力边界,便于形成统一认知。
📊 数组¶
1. 数组基础¶
Java
// 数组基础
public class ArrayBasics {
public static void main(String[] args) {
// 声明和初始化数组
int[] numbers1 = new int[5]; // 声明长度为5的数组
numbers1[0] = 10;
numbers1[1] = 20;
numbers1[2] = 30;
numbers1[3] = 40;
numbers1[4] = 50;
// 声明并初始化
int[] numbers2 = {1, 2, 3, 4, 5};
// 使用循环初始化
int[] numbers3 = new int[5];
for (int i = 0; i < numbers3.length; i++) {
numbers3[i] = i * 10;
}
// 遍历数组
System.out.println("遍历数组:");
for (int i = 0; i < numbers2.length; i++) {
System.out.print(numbers2[i] + " ");
}
// 增强for循环
System.out.println("\n\n增强for循环:");
for (int num : numbers2) {
System.out.print(num + " ");
}
// 数组长度
System.out.println("\n\n数组长度: " + numbers2.length);
}
}
2. 数组操作¶
Java
// 数组操作
import java.util.Arrays;
import java.util.List;
public class ArrayOperations {
public static void main(String[] args) {
int[] numbers = {5, 2, 8, 1, 9, 3};
// 数组排序
Arrays.sort(numbers);
System.out.println("排序后: " + Arrays.toString(numbers));
// 数组复制
int[] copy = Arrays.copyOf(numbers, numbers.length);
System.out.println("复制数组: " + Arrays.toString(copy));
// 数组填充
int[] filled = new int[5];
Arrays.fill(filled, 10);
System.out.println("填充数组: " + Arrays.toString(filled));
// 数组比较
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
System.out.println("数组相等: " + Arrays.equals(arr1, arr2));
// 数组查找
int index = Arrays.binarySearch(numbers, 5);
System.out.println("查找5的位置: " + index);
// 数组转List
Integer[] nums = {1, 2, 3, 4, 5};
List<Integer> list = Arrays.asList(nums);
System.out.println("转List: " + list);
}
}
3. 多维数组¶
Java
// 多维数组
public class MultiDimensionalArray {
public static void main(String[] args) {
// 二维数组
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 遍历二维数组
System.out.println("二维数组:");
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
// 不规则二维数组
int[][] jagged = {
{1, 2},
{3, 4, 5},
{6, 7, 8, 9}
};
System.out.println("\n不规则二维数组:");
for (int i = 0; i < jagged.length; i++) {
for (int j = 0; j < jagged[i].length; j++) {
System.out.print(jagged[i][j] + " ");
}
System.out.println();
}
}
}
🔤 字符串¶
1. String基础¶
Java
// String基础
public class StringBasics {
public static void main(String[] args) {
// 创建字符串
String str1 = "Hello";
String str2 = new String("World");
String str3 = "Hello"; // 字符串常量池
// 字符串比较
System.out.println("str1 == str3: " + (str1 == str3)); // true(同一对象)
System.out.println("str1.equals(str2): " + str1.equals(str2)); // false(内容不同)
// 字符串长度
System.out.println("\nstr1长度: " + str1.length());
// 字符串连接
String str4 = str1 + " " + str2;
System.out.println("连接后: " + str4);
// 字符串格式化
String name = "张三";
int age = 25;
String formatted = String.format("姓名: %s, 年龄: %d", name, age);
System.out.println("格式化: " + formatted);
}
}
2. String常用方法¶
Java
// String常用方法
public class StringMethods {
public static void main(String[] args) {
String str = "Hello World";
// 大小写转换
System.out.println("大写: " + str.toUpperCase());
System.out.println("小写: " + str.toLowerCase());
// 去除空格
String strWithSpaces = " Hello World ";
System.out.println("\n去除空格: " + strWithSpaces.trim());
// 字符串查找
System.out.println("\n包含'World': " + str.contains("World"));
System.out.println("查找'World'位置: " + str.indexOf("World"));
System.out.println("以'Hello'开头: " + str.startsWith("Hello"));
System.out.println("以'World'结尾: " + str.endsWith("World"));
// 字符串截取
System.out.println("\n截取0-5: " + str.substring(0, 5));
System.out.println("从6开始: " + str.substring(6));
// 字符串替换
System.out.println("\n替换'World'为'Java': " + str.replace("World", "Java"));
System.out.println("替换所有'l'为'L': " + str.replace("l", "L"));
// 字符串分割
String str2 = "apple,banana,orange";
String[] fruits = str2.split(",");
System.out.println("\n分割结果: " + java.util.Arrays.toString(fruits));
// 字符串比较
String str3 = "hello";
System.out.println("\n忽略大小写比较: " + str.equalsIgnoreCase(str3));
System.out.println("比较结果: " + str.compareTo(str3));
}
}
3. StringBuilder¶
Java
// StringBuilder
public class StringBuilderExample {
public static void main(String[] args) {
// 创建StringBuilder
StringBuilder sb = new StringBuilder();
// 追加字符串
sb.append("Hello");
sb.append(" ");
sb.append("World");
System.out.println("追加: " + sb.toString());
// 插入字符串
sb.insert(5, "Beautiful ");
System.out.println("插入: " + sb.toString());
// 删除字符串
sb.delete(5, 15);
System.out.println("删除: " + sb.toString());
// 替换字符串
sb.replace(6, 11, "Java");
System.out.println("替换: " + sb.toString());
// 反转字符串
sb.reverse();
System.out.println("反转: " + sb.toString());
// 性能比较
long startTime = System.currentTimeMillis();
String str = "";
for (int i = 0; i < 10000; i++) {
str += "a";
}
long endTime = System.currentTimeMillis();
System.out.println("\nString连接耗时: " + (endTime - startTime) + "ms");
startTime = System.currentTimeMillis();
StringBuilder sb2 = new StringBuilder();
for (int i = 0; i < 10000; i++) {
sb2.append("a");
}
endTime = System.currentTimeMillis();
System.out.println("StringBuilder连接耗时: " + (endTime - startTime) + "ms");
}
}
💡 最佳实践¶
1. 数组使用¶
Java
// 数组使用最佳实践
public class ArrayBestPractices {
public static void main(String[] args) {
// ✅ 使用增强for循环遍历数组
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println(num);
}
// ❌ 避免数组越界
try {
int value = numbers[10]; // 越界
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组越界");
}
// ✅ 使用Arrays工具类
Arrays.sort(numbers);
System.out.println("排序后: " + Arrays.toString(numbers));
}
}
2. 字符串使用¶
Java
// 字符串使用最佳实践
public class StringBestPractices {
public static void main(String[] args) {
// ✅ 使用equals比较字符串内容
String str1 = "Hello";
String str2 = new String("Hello");
System.out.println("使用equals: " + str1.equals(str2));
// ❌ 不要用==比较字符串内容
System.out.println("使用==: " + (str1 == str2)); // false
// ✅ 频繁修改使用StringBuilder
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append("a");
}
// ❌ 不要用String频繁连接
String str = "";
for (int i = 0; i < 1000; i++) {
str += "a"; // 性能差
}
}
}
📝 练习题¶
基础题¶
- 如何声明和初始化数组?
- String有哪些常用方法?
- StringBuilder和String有什么区别?
进阶题¶
- 实现数组排序算法。
- 处理字符串中的空格和特殊字符。
- 使用StringBuilder提高字符串操作性能。
实践题¶
- 实现一个简单的文本处理工具。
- 创建一个数组工具类。
- 实现字符串加密和解密功能。
📚 推荐阅读¶
🔗 下一章¶
面向对象编程 - 学习Java的面向对象编程。