Java:数组与字符串
·
一、字符串(String)常用方法
字符串是不可变对象(修改会创建新对象),核心方法围绕内容操作、查找、转换展开,部分场景需配合 StringBuilder 实现可变操作。
1. 大小写转换
toLowerCase():转为小写toUpperCase():转为大写
String s = "Hello World";
System.out.println(s.toLowerCase()); // hello world
System.out.println(s.toUpperCase()); // HELLO WORLD
2. 字符过滤与替换
replaceAll(regex, replacement):按正则表达式替换字符(常用作过滤)- 场景:删除非字母 / 非数字字符(
[^a-z0-9]表示 “非字母非数字”)
- 场景:删除非字母 / 非数字字符(
String s = "A man, a plan, a canal: Panama";
// 过滤非字母数字,转为小写(用于回文判断等场景)
String clean = s.replaceAll("[^a-z0-9]", "").toLowerCase();
System.out.println(clean); // amanaplanacanalpanama
3. 字符与索引操作
charAt(int index):获取指定索引的字符(索引从 0 开始)indexOf(String str):返回子串首次出现的索引,无则返回 -1
String s = "abcdef";
System.out.println(s.charAt(2)); // c(索引2对应第3个字符)
System.out.println(s.indexOf("cd")); // 2(子串"cd"从索引2开始)
System.out.println(s.indexOf("xyz")); // -1(无此子串)
4. 拆分与拼接
split(String regex):按正则拆分字符串为数组(常用空格拆分单词)
String s = "dog cat cat fish";
String[] words = s.split(" "); // 按空格拆分
System.out.println(Arrays.toString(words)); // [dog, cat, cat, fish]
5. 长度获取
- 字符串长度:
length()(带括号,因为是方法)
String s = "abc";
int len = s.length();
System.out.println(len); // 3
二、可变字符串(StringBuilder)常用方法
StringBuilder 是可变字符串,避免频繁创建新对象,适合频繁修改、拼接、反转场景。
1. 核心方法
| 方法 | 作用 |
|---|---|
append(任意类型) |
追加内容(字符串、数字、字符等) |
reverse() |
反转字符串(无返回值,直接修改自身) |
toString() |
转为不可变的 String 类型 |
setLength(int len) |
截断或补空字符(调整字符串长度) |
2. 代码示例
// 1. 创建 StringBuilder 对象
StringBuilder sb = new StringBuilder();
// 2. 追加内容
sb.append("Hello");
sb.append(", ");
sb.append("World!");
System.out.println(sb); // Hello, World!
// 3. 反转
sb.reverse();
System.out.println(sb); // !dlroW ,olleH
// 4. 截断(保留前5个字符)
sb.setLength(5);
System.out.println(sb); // !dlro
// 5. 转为 String
String result = sb.toString();
System.out.println(result); // !dlro
三、数组(Array)常用操作
数组是固定长度的容器,需通过 Arrays 工具类实现排序、查找、转集合等功能。
1. 核心工具类:java.util.Arrays
(1)数组排序
Arrays.sort(数组):对数组升序排序(支持 int、String、自定义对象等)
// 基本类型数组排序
int[] arr1 = {3, 1, 4, 2};
Arrays.sort(arr1);
System.out.println(Arrays.toString(arr1)); // [1, 2, 3, 4]
// 字符串数组排序(按字典序)
String[] arr2 = {"banana", "apple", "cherry"};
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2)); // [apple, banana, cherry]
(2)数组转集合
Arrays.asList(数组):将数组转为List(注意:返回的 List 不可增删,需用new ArrayList<>()包装)
String[] words = {"dog", "cat", "fish"};
// 方式1:不可增删的 List
List<String> list1 = Arrays.asList(words);
// 方式2:可增删的 ArrayList(推荐)
List<String> list2 = new ArrayList<>(Arrays.asList(words));
list2.add("bird"); // 合法
System.out.println(list2); // [dog, cat, fish, bird]
(3)二维数组排序(自定义规则)
通过 Arrays.sort(数组, Comparator) 实现自定义排序(如按二维数组的某一列排序):
// 二维数组:每个元素是 [起点, 终点]
int[][] points = {{1, 3}, {2, 1}, {4, 2}};
// 按“终点”升序排序(points[i][1] 是终点)
Arrays.sort(points, new Comparator<int[]>() {
@Override
public int compare(int[] a, int[] b) {
// a[1] > b[1]:a放后面(升序);反之放前面
return a[1] - b[1];
}
});
System.out.println(Arrays.deepToString(points)); // [[2, 1], [4, 2], [1, 3]]
2. 数组长度获取
- 数组长度:
length(不带括号,因为是字段)
int[] arr = {1, 2, 3};
int len = arr.length;
System.out.println(len); // 3
3. 数组遍历(常见循环方式)
| 场景 | 代码示例 | 说明 |
|---|---|---|
| 正序遍历 | for (int i = 0; i < arr.length; i++) {} |
从索引 0 到 length-1 |
| 倒序遍历 | for (int i = arr.length-1; i >=0; i--) {} |
从最后一个元素到第一个 |
| 增强 for 循环(遍历值) | for (int num : arr) {} |
无需索引,直接获取每个元素 |
| 双指针(相向) | for (int i=0, j=arr.length-1; i<j; i++,j--) {} |
头尾同时向中间遍历(如回文判断) |
四、数字与数组的常用操作
1. 提取数字的每一位(个、十、百、千位)
通过取余(%10) 提取最后一位,整除(/10) 去掉最后一位,循环实现:
int n = 1234;
// 提取个位、十位、百位、千位
int ge = n % 10; // 4(个位)
int shi = n / 10 % 10; // 3(十位)
int bai = n / 100 % 10; // 2(百位)
int qian = n / 1000; // 1(千位)
// 循环倒序输出每一位(4 → 3 → 2 → 1)
while (n != 0) {
int digit = n % 10;
System.out.println(digit);
n = n / 10;
}
2. 集合(List)常用操作
(1)List 创建与基本方法
// 1. 创建可增删的 ArrayList
List<String> strList = new ArrayList<>();
List<int[]> intList = new ArrayList<>(); // 存储int数组的List
// 2. 核心方法
strList.add("a"); // 添加元素
strList.add("b");
System.out.println(strList.get(0)); // 获取索引0的元素:a
System.out.println(strList.size()); // 获取长度:2
strList.remove(1); // 删除索引1的元素
System.out.println(strList); // [a]
(2)List 与数组的区别
| 特性 | 数组(Array) | List(如 ArrayList) |
|---|---|---|
| 长度 | 固定(创建时指定) | 动态(自动扩容) |
| 方法支持 | 仅 length 字段,无其他方法 | 丰富方法(add/remove/get/size 等) |
| 泛型支持 | 不支持泛型(需手动强转) | 支持泛型(类型安全) |
| 适用场景 | 长度固定、简单存储 | 频繁增删、需要集合 API(如流式处理) |
五、关键对比总结
| 操作目标 | 长度获取方式 | 核心工具 / 类 | 可变 / 不可变 |
|---|---|---|---|
| String 字符串 | s.length() |
String 类方法 | 不可变 |
| StringBuilder | sb.length() |
StringBuilder 类方法 | 可变 |
| 数组(Array) | arr.length |
Arrays 工具类 | 长度固定 |
| List 集合 | list.size() |
ArrayList/LinkedList 类方法 | 动态可变 |
总结
- 字符串操作:优先用
String类方法,频繁修改时用StringBuilder(避免性能损耗); - 数组操作:依赖
Arrays工具类实现排序、转集合,注意数组长度固定; - 数字提取:通过
%10和/10循环提取每一位,适合数字反转、回文判断等场景; - 集合与数组:List 支持动态扩容和丰富方法,数组适合简单、固定长度的存储,两者可通过
Arrays.asList和list.toArray转换。
更多推荐
所有评论(0)