java处理字符串!!!!请高手探讨!不甚感激!
比如这串字符:
- Java code
第一博物品科以教成能造各本模型之技宗旨 第二本科生年二十以上<BLX>三十以下</BLX>身健性行端者合格 第三本科生在京由督局在外省由各提使司文理通<B>曾<I><JHX>算</JHX></I>具有<XHX>高等小</XHX>堂以<BLX>上之</BLX>程度</B>者咨送 第四本科分科一本科二科本科三年科年<Notation>27</Notation>第五本科生名定三十各以外四十各以 第六科目
处理的结果为:
- XML code
<Text>第一博物品科以教成能造各本模型之技宗旨 第二本科生年二十以上</Text><BLX>三十以下</BLX><Text>身健性行端者合格 第三本科生在京由督局在外省由各提使司文理通</Text><B><Text>曾</Text><I><Text></Text><JHX>算</JHX><Text></Text></I><Text>具有</Text><XHX>高等小</XHX><Text>堂以</Text><BLX>上之</BLX><Text>程度</Text></B><Text>者咨送 第四本科分科一本科二科本科三年科年<Text><Notation>27</Notation><Text>第五本科生名定三十各以外四十各以 第六科目</Text>
[解决办法]
这个第一个字符串是什么文件类型的?
txt还是xml?
先用流输出,
然后调用String的拆分,
替代等方法将字符串修改,
再输入到一个xml文件之中
(在不依赖xml解析的情况下)
[解决办法]
针对上面的示例,简单写了个,需测试其他情况,有问题,就改改;
- Java code
static boolean flag = false; public static void main(String[] args) { String value = "第一博物品科以教成能造各本模型之技宗旨 第二本科生年" + "二十以上<BLX>三十以下</BLX>身健性行端者合格 第三本科生在京由督局在外省由" + "各提使司文理通<B>曾<I><JHX>算</JHX></I>具有<XHX>高等小</XHX>堂以" + "<BLX>上之</BLX>程度</B>者咨送 第四本科分科一本科二科本科三年科年" + "<Notation>27</Notation>第五本科生名定三十各以外四十各以 第六科目"; System.out.println(process(value)); } public static String process(String value){ StringBuilder sb = new StringBuilder(); if(value.charAt(0) != '<'){ sb.append("<TEXT>"); } char[] charArr = value.toCharArray(); int offset = 0; for(int i = 0; i < charArr.length;){ if(charArr[i] == '<'){ offset = processSpecial(charArr, i, sb); i += offset; }else{ sb.append(charArr[i]); i++; } } if(flag)sb.append("</TEXT>"); return sb.toString(); } private static int processSpecial(char[] charArr, int i, StringBuilder sb) { int index = 1; StringBuilder tempSB = new StringBuilder(); while(charArr[i] != '>'){ tempSB.append(charArr[i]); index += 1; i += 1; } tempSB.append(">"); if(tempSB.toString().equalsIgnoreCase("<B>") || tempSB.toString().equalsIgnoreCase("<I>")){ if(i > 2){ tempSB.insert(0, "</TEXT>"); } tempSB.append("<TEXT>"); }else if(tempSB.toString().equalsIgnoreCase("</B>") || tempSB.toString().equalsIgnoreCase("</I>")){ tempSB.insert(0, "</TEXT>"); if(i < charArr.length - 3){ tempSB.append("<TEXT>"); } }else if(tempSB.toString().contains("/")){ tempSB.append("<TEXT>"); flag = true; }else{ tempSB.insert(0, "</TEXT>"); flag = false; } sb.append(tempSB.toString()); return index; }