day03_数组与字符串
·
Java第三天:数组与字符串
📚 学习目标
- 掌握一维数组的声明与使用
- 掌握二维数组的声明与使用
- 理解数组的内存模型
- 掌握常用的数组排序算法
- 掌握String类的常用方法
- 理解StringBuilder和StringBuffer
- 了解正则表达式基础
一、一维数组
1.1 数组概述
什么是数组?
数组是一种容器,可以存储多个相同类型的数据。
数组特点
| 特点 | 说明 |
|---|---|
| 固定长度 | 数组一旦创建,长度不可变 |
| 类型统一 | 数组中所有元素类型必须相同 |
| 连续内存 | 数组元素在内存中连续存储 |
| 索引访问 | 通过索引(下标)访问元素,从0开始 |
1.2 数组声明与初始化
声明语法
// 方式1:推荐
数据类型[] 数组名;
// 方式2:不推荐
数据类型 数组名[];
初始化方式
public class ArrayDeclaration {
public static void main(String[] args) {
// 1. 动态初始化(指定长度)
int[] arr1 = new int[5]; // 创建长度为5的int数组
System.out.println("arr1长度: " + arr1.length); // 5
// 2. 静态初始化(指定元素)
int[] arr2 = new int[]{1, 2, 3, 4, 5};
// 3. 静态初始化简化写法
int[] arr3 = {1, 2, 3, 4, 5};
// 4. 先声明后初始化
int[] arr4;
arr4 = new int[]{10, 20, 30};
// 5. 不同类型的数组
String[] names = {"张三", "李四", "王五"};
double[] scores = {85.5, 92.0, 78.5};
boolean[] flags = {true, false, true};
// 6. 数组的默认值
int[] arr5 = new int[5];
System.out.println("int默认值: " + arr5[0]); // 0
String[] arr6 = new String[3];
System.out.println("String默认值: " + arr6[0]); // null
boolean[] arr7 = new boolean[2];
System.out.println("boolean默认值: " + arr7[0]); // false
}
}
1.3 数组访问与遍历
索引访问
public class ArrayAccess {
public static void main(String[] args) {
int[] arr = {10, 20, 30, 40, 50};
// 获取元素
System.out.println("第一个元素: " + arr[0]); // 10
System.out.println("最后一个元素: " + arr[arr.length - 1]); // 50
// 修改元素
arr[0] = 100;
System.out.println("修改后第一个元素: " + arr[0]); // 100
// 数组长度
System.out.println("数组长度: " + arr.length); // 5
// 注意:索引越界会抛出ArrayIndexOutOfBoundsException
// System.out.println(arr[10]); // 错误!
}
}
数组遍历
public class ArrayTraversal {
public static void main(String[] args) {
int[] arr = {10, 20, 30, 40, 50};
// 方式1:普通for循环
System.out.println("方式1:普通for循环");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
// 方式2:增强for循环(foreach)
System.out.println("\n\n方式2:增强for循环");
for (int num : arr) {
System.out.print(num + " ");
}
// 方式3:使用Arrays.toString()
System.out.println("\n\n方式3:Arrays.toString()");
System.out.println(java.util.Arrays.toString(arr));
// 方式4:倒序遍历
System.out.println("\n方式4:倒序遍历");
for (int i = arr.length - 1; i >= 0; i--) {
System.out.print(arr[i] + " ");
}
}
}
1.4 数组内存模型
内存分配
栈内存(Stack) 堆内存(Heap)
┌─────────────┐ ┌─────────────────────┐
│ arr │────────>│ [0] [1] [2] [3] │
│ (引用地址) │ │ 10 20 30 40 │
└─────────────┘ └─────────────────────┘
内存特点
- 栈内存:存储局部变量和引用
- 堆内存:存储实际的对象(数组)
- 引用:变量存储的是对象的地址
示例
public class ArrayMemory {
public static void main(String[] args) {
int[] arr1 = {1, 2, 3};
int[] arr2 = arr1; // arr2指向arr1的地址
System.out.println("arr1: " + java.util.Arrays.toString(arr1));
System.out.println("arr2: " + java.util.Arrays.toString(arr2));
arr2[0] = 100; // 修改arr2
System.out.println("修改后arr1: " + java.util.Arrays.toString(arr1));
// arr1也变了,因为指向同一个数组
// 数组拷贝(创建新数组)
int[] arr3 = new int[arr1.length];
for (int i = 0; i < arr1.length; i++) {
arr3[i] = arr1[i];
}
arr3[0] = 999;
System.out.println("arr1: " + java.util.Arrays.toString(arr1));
System.out.println("arr3: " + java.util.Arrays.toString(arr3));
}
}
二、二维数组
2.1 二维数组概述
二维数组可以看作是一维数组的数组,即数组的每个元素又是一个数组。
2.2 二维数组声明与初始化
public class TwoDArray {
public static void main(String[] args) {
// 1. 动态初始化
int[][] arr1 = new int[3][4]; // 3行4列
// 2. 静态初始化
int[][] arr2 = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 3. 不规则数组(每行列数不同)
int[][] arr3 = new int[3][];
arr3[0] = new int[]{1, 2};
arr3[1] = new int[]{3, 4, 5};
arr3[2] = new int[]{6, 7, 8, 9};
// 4. 静态初始化不规则数组
int[][] arr4 = {
{1, 2},
{3, 4, 5},
{6, 7, 8, 9, 10}
};
}
}
2.3 二维数组访问与遍历
public class TwoDArrayAccess {
public static void main(String[] args) {
int[][] arr = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 访问元素
System.out.println("arr[0][0] = " + arr[0][0]); // 1
System.out.println("arr[1][2] = " + arr[1][2]); // 6
// 获取行数
System.out.println("行数: " + arr.length); // 3
// 获取某行的列数
System.out.println("第1行列数: " + arr[0].length); // 3
// 遍历方式1:双重for循环
System.out.println("\n遍历方式1:");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
// 遍历方式2:增强for循环
System.out.println("\n遍历方式2:");
for (int[] row : arr) {
for (int num : row) {
System.out.print(num + " ");
}
System.out.println();
}
}
}
三、数组排序与查找
3.1 冒泡排序
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {64, 34, 25, 12, 22, 11, 90};
System.out.println("排序前: " + java.util.Arrays.toString(arr));
// 冒泡排序
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// 交换
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println("排序后: " + java.util.Arrays.toString(arr));
}
}
3.2 选择排序
public class SelectionSort {
public static void main(String[] args) {
int[] arr = {64, 25, 12, 22, 11};
System.out.println("排序前: " + java.util.Arrays.toString(arr));
// 选择排序
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
// 找最小值的索引
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 交换
if (minIndex != i) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
System.out.println("排序后: " + java.util.Arrays.toString(arr));
}
}
3.3 二分查找
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
int target = 13;
int index = binarySearch(arr, target);
if (index != -1) {
System.out.println("找到目标值 " + target + ",索引为 " + index);
} else {
System.out.println("未找到目标值 " + target);
}
}
public static int binarySearch(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 未找到
}
}
3.4 Arrays工具类
import java.util.Arrays;
public class ArraysDemo {
public static void main(String[] args) {
int[] arr = {3, 1, 4, 1, 5, 9, 2, 6};
// 1. toString:数组转字符串
System.out.println("toString: " + Arrays.toString(arr));
// 2. sort:排序
Arrays.sort(arr);
System.out.println("sort后: " + Arrays.toString(arr));
// 3. binarySearch:二分查找(数组必须有序)
int index = Arrays.binarySearch(arr, 5);
System.out.println("5的索引: " + index);
// 4. fill:填充
int[] arr2 = new int[5];
Arrays.fill(arr2, 10);
System.out.println("fill后: " + Arrays.toString(arr2));
// 5. copyOf:复制
int[] arr3 = Arrays.copyOf(arr, arr.length);
System.out.println("copyOf: " + Arrays.toString(arr3));
// 6. copyOfRange:范围复制
int[] arr4 = Arrays.copyOfRange(arr, 2, 5);
System.out.println("copyOfRange(2,5): " + Arrays.toString(arr4));
// 7. equals:比较数组内容
int[] arr5 = {1, 2, 3, 4, 5, 6, 9};
System.out.println("equals: " + Arrays.equals(arr, arr5));
}
}
四、String类详解
4.1 String概述
String特点
| 特点 | 说明 |
|---|---|
| 不可变 | String对象创建后,内容不可修改 |
| 常量池 | 字符串常量存储在字符串常量池 |
| final类 | String类不能被继承 |
| Unicode | 内部使用char数组存储Unicode字符 |
4.2 String创建方式
public class StringCreation {
public static void main(String[] args) {
// 方式1:字面量
String s1 = "Hello";
// 方式2:new关键字
String s2 = new String("Hello");
// 方式3:字符数组
char[] chars = {'H', 'e', 'l', 'l', 'o'};
String s3 = new String(chars);
// 方式4:字节数组
byte[] bytes = {72, 101, 108, 108, 111};
String s4 = new String(bytes);
// 字符串常量池
String a = "Java";
String b = "Java";
String c = new String("Java");
System.out.println("a == b: " + (a == b)); // true
System.out.println("a == c: " + (a == c)); // false
System.out.println("a.equals(c): " + a.equals(c)); // true
}
}
4.3 String常用方法
public class StringMethods {
public static void main(String[] args) {
String str = "Hello, Java World!";
// 1. 获取长度
System.out.println("长度: " + str.length());
// 2. 获取字符
System.out.println("索引5的字符: " + str.charAt(5));
// 3. 获取子串
System.out.println("substring(7): " + str.substring(7));
System.out.println("substring(7, 11): " + str.substring(7, 11));
// 4. 查找
System.out.println("indexOf('Java'): " + str.indexOf("Java"));
System.out.println("lastIndexOf('o'): " + str.lastIndexOf('o'));
// 5. 判断
System.out.println("startsWith('Hello'): " + str.startsWith("Hello"));
System.out.println("endsWith('!'): " + str.endsWith("!"));
System.out.println("contains('Java'): " + str.contains("Java"));
System.out.println("isEmpty(): " + str.isEmpty());
// 6. 比较
System.out.println("equals: " + str.equals("Hello, Java World!"));
System.out.println("equalsIgnoreCase: " + "hello".equalsIgnoreCase("HELLO"));
System.out.println("compareTo: " + "abc".compareTo("abd"));
// 7. 大小写转换
System.out.println("toUpperCase: " + str.toUpperCase());
System.out.println("toLowerCase: " + str.toLowerCase());
// 8. 去除空格
String s = " Hello ";
System.out.println("trim: '" + s.trim() + "'");
// 9. 替换
System.out.println("replace: " + str.replace("Java", "Python"));
System.out.println("replaceAll: " + "a1b2c3".replaceAll("\\d", "-"));
// 10. 分割
String[] parts = "apple,banana,orange".split(",");
System.out.println("split: " + java.util.Arrays.toString(parts));
// 11. 转换
char[] charArray = str.toCharArray();
byte[] byteArray = str.getBytes();
}
}
4.4 字符串反转与回文判断
public class StringPractice {
public static void main(String[] args) {
// 字符串反转
String str = "Hello";
String reversed = reverse(str);
System.out.println("反转: " + str + " -> " + reversed);
// 判断回文
String s1 = "上海自来水来自海上";
String s2 = "hello";
System.out.println(s1 + "是回文: " + isPalindrome(s1));
System.out.println(s2 + "是回文: " + isPalindrome(s2));
// 统计字符出现次数
String text = "Hello, Java!";
char target = 'l';
int count = countChar(text, target);
System.out.println("'" + target + "'出现次数: " + count);
}
// 字符串反转
public static String reverse(String str) {
return new StringBuilder(str).reverse().toString();
}
// 判断回文
public static boolean isPalindrome(String str) {
String s = str.replaceAll("[^a-zA-Z0-9\u4e00-\u9fa5]", "").toLowerCase();
return s.equals(new StringBuilder(s).reverse().toString());
}
// 统计字符出现次数
public static int countChar(String str, char target) {
int count = 0;
for (char c : str.toCharArray()) {
if (c == target) {
count++;
}
}
return count;
}
}
五、StringBuilder与StringBuffer
5.1 为什么需要StringBuilder?
public class StringProblem {
public static void main(String[] args) {
// String拼接问题
String s = "";
long start = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
s += i; // 每次都创建新的String对象
}
long end = System.currentTimeMillis();
System.out.println("String拼接耗时: " + (end - start) + "ms");
// StringBuilder解决
StringBuilder sb = new StringBuilder();
start = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
sb.append(i); // 在原对象上追加
}
end = System.currentTimeMillis();
System.out.println("StringBuilder耗时: " + (end - start) + "ms");
}
}
5.2 StringBuilder常用方法
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
// 1. append:追加
sb.append("Hello");
sb.append(" ");
sb.append("World");
System.out.println("append: " + sb);
// 2. insert:插入
sb.insert(5, ",");
System.out.println("insert: " + sb);
// 3. delete:删除
sb.delete(5, 6);
System.out.println("delete: " + sb);
// 4. replace:替换
sb.replace(6, 11, "Java");
System.out.println("replace: " + sb);
// 5. reverse:反转
sb.reverse();
System.out.println("reverse: " + sb);
// 6. toString:转String
String result = sb.toString();
System.out.println("toString: " + result);
// 7. 链式调用
StringBuilder sb2 = new StringBuilder();
sb2.append("A").append("B").append("C");
System.out.println("链式调用: " + sb2);
}
}
5.3 String、StringBuilder、StringBuffer对比
| 特性 | String | StringBuilder | StringBuffer |
|---|---|---|---|
| 可变性 | 不可变 | 可变 | 可变 |
| 线程安全 | 安全(不可变) | 不安全 | 安全(同步) |
| 性能 | 低(频繁创建) | 高 | 中等 |
| 适用场景 | 少量字符串操作 | 单线程大量操作 | 多线程大量操作 |
public class StringCompare {
public static void main(String[] args) {
// String:不可变
String s1 = "Hello";
String s2 = s1 + " World"; // 创建新对象
System.out.println("s1: " + s1); // Hello
System.out.println("s2: " + s2); // Hello World
// StringBuilder:可变,非线程安全
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // 在原对象上修改
System.out.println("StringBuilder: " + sb);
// StringBuffer:可变,线程安全
StringBuffer sbuf = new StringBuffer("Hello");
sbuf.append(" World");
System.out.println("StringBuffer: " + sbuf);
}
}
六、正则表达式基础
6.1 正则表达式概述
正则表达式是一种字符串匹配模式,用于检查字符串是否符合某种格式。
6.2 常用正则表达式
| 表达式 | 说明 | 示例 |
|---|---|---|
| . | 任意字符 | a.c 匹配 abc, adc |
| \d | 数字 | \d{3} 匹配 123 |
| \D | 非数字 | \D+ 匹配 abc |
| \w | 单词字符 | \w+ 匹配 abc123 |
| \W | 非单词字符 | \W+ 匹配 !@# |
| \s | 空白字符 | \s+ 匹配空格、制表符 |
| \S | 非空白字符 | \S+ 匹配非空格 |
| ^ | 开头 | ^Hello 匹配以Hello开头 |
| $ | 结尾 | World$ 匹配以World结尾 |
| * | 0次或多次 | a* 匹配 “”, a, aa |
| + | 1次或多次 | a+ 匹配 a, aa |
| ? | 0次或1次 | a? 匹配 “”, a |
| {n} | 恰好n次 | a{3} 匹配 aaa |
| {n,} | 至少n次 | a{2,} 匹配 aa, aaa |
| {n,m} | n到m次 | a{2,4} 匹配 aa, aaa, aaaa |
| [abc] | 字符集合 | [aeiou] 匹配元音 |
| [^abc] | 排除字符 | [^0-9] 匹配非数字 |
6.3 正则表达式使用
public class RegexDemo {
public static void main(String[] args) {
// 1. matches:完全匹配
String phone = "13812345678";
boolean isPhone = phone.matches("1[3-9]\\d{9}");
System.out.println("手机号验证: " + isPhone);
// 2. 邮箱验证
String email = "test@example.com";
boolean isEmail = email.matches("\\w+@\\w+\\.\\w+");
System.out.println("邮箱验证: " + isEmail);
// 3. split:分割
String str = "apple,banana;orange|grape";
String[] fruits = str.split("[,;|]");
System.out.println("分割: " + java.util.Arrays.toString(fruits));
// 4. replaceAll:替换
String text = "手机号:13812345678,邮箱:test@example.com";
String masked = text.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
System.out.println("脱敏: " + masked);
// 5. 身份证验证
String idCard = "110101199001011234";
boolean isIdCard = idCard.matches("\\d{17}[\\dXx]");
System.out.println("身份证验证: " + isIdCard);
}
}
七、实践案例
7.1 学生成绩管理系统
import java.util.Arrays;
/**
* 学生成绩管理系统
* 使用数组存储学生信息和成绩
*/
public class StudentGradeSystem {
public static void main(String[] args) {
// 学生姓名
String[] names = {"张三", "李四", "王五", "赵六", "钱七"};
// 三科成绩
int[][] scores = {
{85, 92, 78},
{90, 88, 95},
{76, 82, 80},
{92, 95, 98},
{68, 72, 70}
};
// 科目名称
String[] subjects = {"语文", "数学", "英语"};
System.out.println("========== 学生成绩表 ==========");
System.out.printf("%-8s", "姓名");
for (String subject : subjects) {
System.out.printf("%-8s", subject);
}
System.out.printf("%-8s%-8s%-8s\n", "平均分", "最高分", "最低分");
System.out.println("-".repeat(60));
// 计算并显示每个学生的成绩
for (int i = 0; i < names.length; i++) {
System.out.printf("%-8s", names[i]);
for (int score : scores[i]) {
System.out.printf("%-8d", score);
}
double avg = calculateAverage(scores[i]);
int max = getMax(scores[i]);
int min = getMin(scores[i]);
System.out.printf("%-8.2f%-8d%-8d\n", avg, max, min);
}
System.out.println("-".repeat(60));
// 计算每科平均分
System.out.printf("%-8s", "平均分");
for (int j = 0; j < subjects.length; j++) {
double subjectAvg = 0;
for (int i = 0; i < names.length; i++) {
subjectAvg += scores[i][j];
}
System.out.printf("%-8.2f", subjectAvg / names.length);
}
System.out.println();
}
// 计算平均分
public static double calculateAverage(int[] scores) {
int sum = 0;
for (int score : scores) {
sum += score;
}
return (double) sum / scores.length;
}
// 获取最高分
public static int getMax(int[] arr) {
int max = arr[0];
for (int num : arr) {
if (num > max) max = num;
}
return max;
}
// 获取最低分
public static int getMin(int[] arr) {
int min = arr[0];
for (int num : arr) {
if (num < min) min = num;
}
return min;
}
}
7.2 字符串统计工具
import java.util.HashMap;
import java.util.Map;
/**
* 字符串统计工具
* 统计字符串中字符、单词等出现次数
*/
public class StringStatistics {
public static void main(String[] args) {
String text = "Hello World! Hello Java! Java is great!";
// 1. 统计字符出现次数
System.out.println("========== 字符统计 ==========");
Map<Character, Integer> charCount = countCharacters(text);
for (Map.Entry<Character, Integer> entry : charCount.entrySet()) {
if (entry.getKey() != ' ') {
System.out.println("'" + entry.getKey() + "': " + entry.getValue());
}
}
// 2. 统计单词出现次数
System.out.println("\n========== 单词统计 ==========");
Map<String, Integer> wordCount = countWords(text);
for (Map.Entry<String, Integer> entry : wordCount.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// 3. 统计字母、数字、空格等
System.out.println("\n========== 类型统计 ==========");
int letters = 0, digits = 0, spaces = 0, others = 0;
for (char c : text.toCharArray()) {
if (Character.isLetter(c)) {
letters++;
} else if (Character.isDigit(c)) {
digits++;
} else if (Character.isWhitespace(c)) {
spaces++;
} else {
others++;
}
}
System.out.println("字母: " + letters);
System.out.println("数字: " + digits);
System.out.println("空格: " + spaces);
System.out.println("其他: " + others);
}
// 统计字符出现次数
public static Map<Character, Integer> countCharacters(String str) {
Map<Character, Integer> map = new HashMap<>();
for (char c : str.toCharArray()) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
return map;
}
// 统计单词出现次数
public static Map<String, Integer> countWords(String str) {
Map<String, Integer> map = new HashMap<>();
String[] words = str.toLowerCase().split("[\\s\\p{Punct}]+");
for (String word : words) {
if (!word.isEmpty()) {
map.put(word, map.getOrDefault(word, 0) + 1);
}
}
return map;
}
}
八、常见问题与注意事项
8.1 数组索引越界
public class ArrayIndexError {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
// 错误:索引越界
try {
System.out.println(arr[3]); // ArrayIndexOutOfBoundsException
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("错误:数组索引越界");
}
// 正确做法:检查索引
int index = 3;
if (index >= 0 && index < arr.length) {
System.out.println(arr[index]);
} else {
System.out.println("索引无效");
}
}
}
8.2 空指针异常
public class NullPointerError {
public static void main(String[] args) {
String str = null;
// 错误:空指针
try {
System.out.println(str.length()); // NullPointerException
} catch (NullPointerException e) {
System.out.println("错误:空指针异常");
}
// 正确做法:先判断非空
if (str != null) {
System.out.println(str.length());
} else {
System.out.println("字符串为null");
}
}
}
8.3 字符串比较
public class StringCompareError {
public static void main(String[] args) {
String s1 = new String("hello");
String s2 = new String("hello");
// 错误:使用==比较
if (s1 == s2) {
System.out.println("相等"); // 不会执行
}
// 正确:使用equals比较
if (s1.equals(s2)) {
System.out.println("内容相等"); // 会执行
}
// 更安全的写法
String s3 = null;
if ("hello".equals(s3)) { // 常量在前,避免空指针
System.out.println("相等");
}
}
}
九、课后作业
必做题
-
数组操作
- 实现冒泡排序和选择排序
- 实现数组的复制、反转、查找
- 找出数组中的最大值和最小值
-
字符串操作
- 实现字符串反转
- 判断字符串是否是回文
- 统计字符串中字符出现次数
-
综合练习
- 实现学生成绩管理系统
- 实现字符串统计工具
选做题
-
数组高级
- 实现快速排序算法
- 实现数组去重
- 合并两个有序数组
-
字符串高级
- 实现字符串压缩(aabcccccaaa → a2b1c5a3)
- 判断两个字符串是否是变位词
- 实现简单的文本编辑器功能
十、学习总结
今日要点
-
一维数组
- 声明、初始化、访问、遍历
- 数组内存模型
- 数组排序与查找
-
二维数组
- 声明、初始化、遍历
- 不规则数组
-
String类
- 创建方式、常用方法
- 字符串不可变性
- 字符串常量池
-
StringBuilder与StringBuffer
- 可变字符串
- 性能对比
-
正则表达式
- 基本语法
- 常用方法
学习建议
- 理解内存模型:画图理解数组在内存中的存储
- 多练习排序算法:手写冒泡、选择排序
- 熟练使用String方法:记住常用的字符串操作方法
- 注意性能:字符串拼接使用StringBuilder
下一课预告:面向对象基础
学习时间:建议3小时(理论1小时 + 实践2小时)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)