一、字符串操作基础
1.1 字符统计与处理
统计重复字符数量
使用HashMap实现字符频率统计,时间复杂度O(n):
public static Map<Character, Integer> countChars(String str) {Map<Character, Integer> map = new HashMap<>();for (char c : str.toCharArray()) {map.put(c, map.getOrDefault(c, 0) + 1);}return map;}
寻找第一个非重复字符
结合LinkedHashMap保持插入顺序特性:
public static Character findFirstUnique(String str) {LinkedHashMap<Character, Integer> map = new LinkedHashMap<>();for (char c : str.toCharArray()) {map.put(c, map.getOrDefault(c, 0) + 1);}for (Map.Entry<Character, Integer> entry : map.entrySet()) {if (entry.getValue() == 1) return entry.getKey();}return null;}
1.2 字符串变换操作
反转字母与单词
双指针法实现高效反转:
public static String reverseWords(String str) {String[] words = str.trim().split("\\s+");int left = 0, right = words.length - 1;while (left < right) {String temp = words[left];words[left] = words[right];words[right] = temp;left++;right--;}return String.join(" ", words);}
字符串回文检测
考虑Unicode字符与大小写敏感问题:
public static boolean isPalindrome(String str) {String clean = str.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();int left = 0, right = clean.length() - 1;while (left < right) {if (clean.charAt(left++) != clean.charAt(right--)) {return false;}}return true;}
二、数值处理进阶
2.1 类型转换与安全
安全类型转换
处理数值溢出场景的转换方法:
public static int safeStringToInt(String str) {try {return Integer.parseInt(str);} catch (NumberFormatException e) {// 处理溢出或格式错误if (str.startsWith("-") && str.length() > 11 ||!str.startsWith("-") && str.length() > 10) {throw new ArithmeticException("Integer overflow");}return 0; // 或其他默认值}}
大数求和
使用BigInteger处理超大整数:
public static String bigNumberSum(String num1, String num2) {BigInteger n1 = new BigInteger(num1);BigInteger n2 = new BigInteger(num2);return n1.add(n2).toString();}
2.2 浮点数处理
有限浮点数检测
避免NaN和Infinity的判断方法:
public static boolean isFinite(double d) {return !Double.isInfinite(d) && !Double.isNaN(d);}
相邻浮点数比较
考虑浮点精度问题的比较方法:
public static boolean approximatelyEqual(double a, double b, double epsilon) {return Math.abs(a - b) <= ((Math.abs(a) < Math.abs(b) ?Math.abs(b) : Math.abs(a)) * epsilon);}
三、高级应用场景
3.1 字符串组合与排列
生成全部排列组合
递归实现字符串全排列:
public static List<String> permute(String str) {List<String> result = new ArrayList<>();backtrack(result, new StringBuilder(), str.toCharArray(), new boolean[str.length()]);return result;}private static void backtrack(List<String> result, StringBuilder sb,char[] chars, boolean[] used) {if (sb.length() == chars.length) {result.add(sb.toString());return;}for (int i = 0; i < chars.length; i++) {if (used[i]) continue;used[i] = true;sb.append(chars[i]);backtrack(result, sb, chars, used);sb.deleteCharAt(sb.length() - 1);used[i] = false;}}
用分隔符连接字符串
Java 8+的Stream实现方式:
public static String joinWithDelimiter(List<String> strings, String delimiter) {return strings.stream().collect(Collectors.joining(delimiter));}
3.2 数字格式化处理
紧凑数字格式化
使用DecimalFormat实现千位分隔:
public static String formatCompactNumber(long number) {DecimalFormat df = new DecimalFormat("#,###");return df.format(number);}
数值范围处理
安全计算取整除和模数:
public static long[] safeDivide(long dividend, long divisor) {if (divisor == 0) throw new ArithmeticException("Division by zero");return new long[]{dividend / divisor, dividend % divisor};}
四、性能优化建议
- 字符串拼接优化:对于大量拼接操作,优先使用StringBuilder而非”+”操作符
- 正则表达式缓存:频繁使用的正则表达式应编译为Pattern对象复用
- 数值计算中间值:大数运算时使用更高精度类型作为中间变量
- 内存预分配:已知结果长度时,预先分配集合容量减少扩容开销
五、异常处理要点
- 数值转换时捕获NumberFormatException
- 大数运算前检查数值范围
- 浮点运算考虑精度损失问题
- 字符串操作注意空指针异常
本文通过39个典型场景的解决方案,系统展示了Java在字符串处理和数值计算方面的最佳实践。开发者可根据实际需求选择合适的方法,特别注意边界条件处理和性能优化,这些技巧在处理大规模数据或高并发场景时尤为重要。建议将常用方法封装为工具类,提高代码复用率和可维护性。