日期:2014-05-20  浏览次数:20782 次

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;
    }