1. Java字符串操作核心方法解析
1.1 基础字符串处理方法
在Java编程中,字符串操作是最基础也是使用频率最高的功能之一。String类提供了丰富的方法来处理文本数据,这些方法在日常开发中几乎无处不在。
字符串截取与分割:
substring(int beginIndex):从指定位置开始截取到字符串末尾substring(int beginIndex, int endIndex):截取指定范围内的子串split(String regex):根据正则表达式分割字符串为数组
注意:substring的endIndex参数是"独占"的,即不包含该位置的字符。例如"hello".substring(1,3)返回"el"
字符串修改方法:
trim():去除首尾空白字符(包括空格、制表符、换行符等)replace(char oldChar, char newChar):替换所有匹配字符replaceAll(String regex, String replacement):基于正则表达式的替换
java复制String str = " Hello World ";
System.out.println(str.trim()); // "Hello World"
System.out.println(str.replace('l', 'L')); // " HeLLo WorLd "
System.out.println(str.replaceAll("\\s+", "-")); // "--Hello-World--"
1.2 字符串查找与比较
字符串查找:
contains(CharSequence s):判断是否包含指定字符序列indexOf(String str):返回子串首次出现的位置lastIndexOf(String str):返回子串最后一次出现的位置
字符串比较:
equals(Object anObject):严格比较字符串内容equalsIgnoreCase(String anotherString):忽略大小写的比较compareTo(String anotherString):按字典顺序比较
java复制String s1 = "Java";
String s2 = "java";
System.out.println(s1.equals(s2)); // false
System.out.println(s1.equalsIgnoreCase(s2)); // true
System.out.println(s1.compareTo(s2)); // -32 (ASCII码差值)
实际开发中,字符串比较推荐使用
Objects.equals()方法,可以避免NullPointerException
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Java数学运算与数字处理
2.1 基本数学运算方法
Java的Math类提供了丰富的数学运算方法,这些方法都是静态的,可以直接通过类名调用。
常用数学方法:
Math.sqrt(double a):平方根运算Math.pow(double a, double b):幂运算(a的b次方)Math.abs(int a):绝对值
舍入运算:
Math.ceil(double a):向上取整Math.floor(double a):向下取整Math.round(float a):四舍五入
java复制System.out.println(Math.sqrt(16)); // 4.0
System.out.println(Math.pow(2, 3)); // 8.0
System.out.println(Math.ceil(3.2)); // 4.0
System.out.println(Math.floor(3.8)); // 3.0
System.out.println(Math.round(3.5)); // 4
2.2 数字类型转换与包装类
Java的数字处理离不开包装类,它们提供了基本数据类型与对象之间的桥梁。
主要包装类:
Integer:对应int类型Double:对应double类型Character:对应char类型
自动装箱与拆箱:
java复制Integer a = 10; // 自动装箱
int b = a; // 自动拆箱
数字类型转换:
Integer.parseInt(String s):字符串转intDouble.parseDouble(String s):字符串转doubleInteger.toString(int i):int转字符串
java复制String numStr = "123";
int num = Integer.parseInt(numStr); // 123
String str = Integer.toString(num); // "123"
注意:parse方法在转换失败时会抛出NumberFormatException,实际开发中应该做好异常处理
3. Java日期时间处理详解
3.1 传统日期时间API
在Java 8之前,主要使用java.util.Date和java.util.Calendar类来处理日期时间。
Date类基本用法:
java复制Date now = new Date(); // 当前时间
System.out.println(now); // 输出类似:Wed May 25 14:30:45 CST 2023
Calendar类基本用法:
java复制Calendar cal = Calendar.getInstance();
cal.set(2023, Calendar.MAY, 25); // 设置日期
int year = cal.get(Calendar.YEAR); // 获取年份
int month = cal.get(Calendar.MONTH); // 获取月份(0-11)
int day = cal.get(Calendar.DAY_OF_MONTH); // 获取日
注意:Calendar的月份是从0开始的,即0表示1月,11表示12月
3.2 Java 8日期时间API
Java 8引入了全新的日期时间API,位于java.time包中,解决了旧API的诸多问题。
核心类:
LocalDate:只包含日期LocalTime:只包含时间LocalDateTime:包含日期和时间ZonedDateTime:带时区的日期时间
基本用法:
java复制LocalDate today = LocalDate.now(); // 当前日期
LocalTime now = LocalTime.now(); // 当前时间
LocalDateTime current = LocalDateTime.now(); // 当前日期时间
LocalDate specificDate = LocalDate.of(2023, Month.MAY, 25); // 指定日期
LocalTime specificTime = LocalTime.of(14, 30, 45); // 指定时间
日期运算:
java复制LocalDate tomorrow = today.plusDays(1); // 加1天
LocalDate nextWeek = today.plusWeeks(1); // 加1周
LocalDate lastMonth = today.minusMonths(1); // 减1个月
日期比较:
java复制boolean isBefore = today.isBefore(tomorrow); // true
boolean isAfter = today.isAfter(yesterday); // true
boolean isEqual = today.isEqual(today); // true
4. Java集合与比较器
4.1 Comparable与Comparator接口
在Java中,对象排序主要通过Comparable和Comparator两个接口实现。
Comparable接口:
- 自然排序,类实现Comparable接口
- 重写
compareTo(T o)方法
java复制class Person implements Comparable<Person> {
private String name;
private int age;
@Override
public int compareTo(Person o) {
return this.age - o.age; // 按年龄排序
}
}
Comparator接口:
- 定制排序,单独实现Comparator接口
- 重写
compare(T o1, T o2)方法
java复制Comparator<Person> nameComparator = new Comparator<>() {
@Override
public int compare(Person p1, Person p2) {
return p1.getName().compareTo(p2.getName()); // 按姓名排序
}
};
4.2 集合排序示例
java复制List<Person> people = new ArrayList<>();
// 添加人员...
// 使用自然排序(Comparable)
Collections.sort(people);
// 使用定制排序(Comparator)
Collections.sort(people, nameComparator);
// Java 8之后可以使用List的sort方法
people.sort(nameComparator);
实际开发中,对于简单的比较逻辑,可以使用Lambda表达式简化Comparator的实现:
java复制people.sort((p1, p2) -> p1.getName().compareTo(p2.getName()));
5. 实用技巧与常见问题
5.1 字符串拼接性能优化
在需要频繁拼接字符串的场景下,使用+运算符效率较低,应该使用StringBuilder或StringBuffer。
java复制// 低效做法
String result = "";
for (int i = 0; i < 100; i++) {
result += i; // 每次循环都会创建新的String对象
}
// 高效做法
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
sb.append(i);
}
String result = sb.toString();
StringBuffer是线程安全的版本,但在单线程环境下StringBuilder性能更好
5.2 日期格式化的正确方式
SimpleDateFormat使用:
java复制SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formatted = sdf.format(new Date()); // 日期转字符串
Date parsed = sdf.parse("2023-05-25 14:30:45"); // 字符串转日期
Java 8 DateTimeFormatter:
java复制DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatted = LocalDateTime.now().format(formatter); // 日期转字符串
LocalDateTime parsed = LocalDateTime.parse("2023-05-25 14:30:45", formatter); // 字符串转日期
注意:SimpleDateFormat不是线程安全的,在多线程环境下应该为每个线程创建独立的实例
5.3 数字处理的边界情况
处理数字时需要注意各种边界情况:
- 整数溢出
- 浮点数精度问题
- 除零异常
- 数值范围检查
java复制// 整数溢出示例
int max = Integer.MAX_VALUE;
System.out.println(max + 1); // -2147483648 (溢出)
// 浮点数精度问题
System.out.println(0.1 + 0.2); // 0.30000000000000004
// 除零异常
try {
int result = 1 / 0;
} catch (ArithmeticException e) {
System.out.println("不能除以零");
}
在实际项目中,对于数值计算应该:
- 使用
Math.addExact等方法进行安全运算 - 使用BigDecimal处理精确的金融计算
- 做好边界值检查和异常处理
