// Unicode 下标字符映射:0-9 对应 ₀ 到 ₉
private static final char[] SUBSCRIPT_DIGITS = {
'\u2080', '\u2081', '\u2082', '\u2083', '\u2084',
'\u2085', '\u2086', '\u2087', '\u2088', '\u2089'
};
/**
* 将分子式中的数字转换为下标格式(例如 C3H6O3 → C₃H₆O₃)
* @param formula 原始分子式字符串
* @return 转换后的下标格式分子式
*/
public static String convertToSubscript(String formula) {
if (formula == null || formula.isEmpty()) {
return formula;
}
StringBuilder result = new StringBuilder();
for (char c : formula.toCharArray()) {
if (Character.isDigit(c)) {
int digit = Character.getNumericValue(c);
if (digit >= 0 && digit <= 9) {
result.append(SUBSCRIPT_DIGITS[digit]);
} else {
result.append(c); // 非0-9数字保留原字符(理论上不会触发)
}
} else {
result.append(c); // 非数字字符直接保留
}
}
return result.toString();
}