简单的先讲下处理思路:
化学式标准为字母和数字组成,如果为离子式,则会在末尾有“+”或者“-”用来标识所携带的电荷数。一般情况下,化学式以字母开头,以数字或电荷标识结尾,如果在化学方程式中,也会以数字开头。因此处理逻辑为逐个检测化学式的字符,根据该字符是字母还是数字进行处理,如果为字母,则正常进行显示,如果为数字,则进行以下情况进行区分:
1.如果在首位,则该数字正常显示;
2.如果该数字存在后一位字符,且为电荷标识,则根据电荷数的位数,截取对应的长度展示为上标;
3.普通情况,数字展示为下标
在开发中,使用一个临时字符串来记录各段格式化后的小字符串,相关代码如下:
private static final String subStart = "<sub>";
private static final String subEnd = "</sub>";
private static final String supStart = "<sup>";
private static final String supEnd = "</sup>";
/**
*
* @param source 未格式化的化学式
* @param elecNum 电荷数(正整数)
* @return
*/
public static String convert(String source,int elecNum){
StringBuffer formatted = new StringBuffer();
StringBuffer original = new StringBuffer(source);
StringBuffer temp = new StringBuffer();
for(int i=0;i<original.length();i++){
if(i==0){
formatted.append(original.substring(i, i+1));
continue;
}
char c