输入一个化学表达式,返回一个字符串,带有上标与下标,可以在网页中显示出上标与下标.
public String getComposeHTML(String str_value){ //System.out.print(str_value); StringBuffer sb = new StringBuffer(); int index = 0; char[] chars = str_value.toCharArray(); // 从前往后 for (int i = 1; i < chars.length; i++) { // 当前字符是+或-,前一个字符是字母或右括号 if(chars[i]=='+' || chars[i]=='-' ){ if(i-1>=0 ){ if(chars[i-1]==')' || (chars[i-1]>='A' && chars[i-1]<='Z') || (chars[i-1]>='a' && chars[i-1]<='z') ){ sb.append(str_value.substring(index,i)); index = i+1; sb.append("<sup>"+chars[i]+"</sup>"); } } continue; }else if(chars[i]>='0' && chars[i]<='9'){ //if(前一个字符是 右括号 或者 前一个字符是字母) if(chars[i-1]==')' || (chars[i-1]>='A' && chars[i-1]<='Z') || (chars[i-1]>='a' && chars[i-1]<='z') ){ if( i >= chars.length-1){ // IF:当前已到结尾了,后面再也没有字符了 sb.append(str_value.substring(index,i)); index = i+1; sb.append("<sub>"+str_value.substring(i,i+1)+"</sub>"); break; }else { // else:当前还没到结尾,后面还有其它的字符 // for( 循环取后一个字符 ){ for ( int j=i+1; j < chars.length; j++) { if(chars[j]>='0' && chars[j]<='9'){ // if(后一个字符也是数字) 则继续判断下一个字符 continue; } else if(chars[j]=='+' || chars[j]=='-') { // if(后一个字符是+加号或-减号) 则这个数字串是上标 sb.append(str_value.substring(index,i)); index = j+1; sb.append("<sup>"+str_value.substring(i,j+1)+"</sup>"); i = j+1; break; } else { // else(后一个字符不是前面所说的情况) 则这个数字串是下标 sb.append(str_value.substring(index,i)); index = j; sb.append("<sub>"+str_value.substring(i,j)+"</sub>"); i = j-1; break; }//~ if-else 根据下一个字符的类型来分别处理 } //~ for(j++) } //~if-else 是否已经是结尾字符 } //~if 前一个字符是字母或右括号 } //~ if-else 判断当前字符的类型 } //~ for(i++) if(index<str_value.length()){ sb.append( str_value.substring(index,str_value.length())); } //System.out.println(" --> "+sb.toString()); return sb.toString(); }
已知的BUG : 无法 解析 NO3-