将字符串剪切为给定索引

时间:2012-03-05 10:02:39

标签: java string word truncate html

我有一个字符串,我想在给定的索引处剪辑它。在场景中,String可能包含HTML标记,我必须在剪切时跳过这些标记。

例如,如果字符串是:

"Les pirates ont<br/>attaqué des douzaines de sites Web français";

我希望将其剪辑为25,以便我可以获得Les pirates ont<br/>attaqué...。另外我不能从中间切一个单词,而剪辑如果我得到剪切点处的字符不是空格那么我必须从该点回溯字符串直到我找不到空格。如果找到任何空格,那么我将切入该索引。

以下是我尝试的代码,但它无限循环:

public class Test {

    private String value = "Les pirates ont<br/>attaqué des douzaines de sites Web français";
    private int clipAt = 25;

    public Test() {
        run();
    }

    private void run() {
        String elipsis = "...";
        int originalLength = value.length();
        int cliplength = clipAt - elipsis.length();
        String clipedValue = value;

        if (originalLength > cliplength) {
            char character = value.charAt(cliplength + 1);

            while (character != ' ') {
                if(character == '>'){                   
                    cliplength += count(value.substring(0, cliplength+2));       
                }

                cliplength = cliplength - 1;
                character = value.charAt(cliplength + 1);                

            }
            clipedValue = value.substring(0, cliplength + 1)+elipsis;
        } 
        System.out.println(clipedValue);
    }

    private int count(String str){      
        int length = str.length() - 1;
        char character = str.charAt(length);
        int count = 0;
        while(character != '<'){
            length--;
            character = str.charAt(length);
            count++;
        }
        System.out.println(count);
        return count;
    }

    public static void main(String... args){
        new Test();
    }
}

任何信息都对我很有帮助。

感谢。

2 个答案:

答案 0 :(得分:1)

解析HTML并不是一件容易的事。 HTML不是常规语言,所以正则表达式不会帮助你...... 但是,您可能会发现htmlunit有帮助。另请检查the options for HTML scrapping

祝你好运!

答案 1 :(得分:1)

如果文本说"I am feeling <html> too good </html> today.",现在假设我说剪辑为14,那么会产生轻微的混淆,所以我想要返回此字符串"I am feeling <html>..."或其他内容?

试试这段代码,希望这能解决问题:

public class ClipText
{
    private void clipString(String text, int endIndex)
    {
        int i = endIndex;
        String result = new String();
        do
        {
            if (Character.isWhitespace(text.charAt(endIndex)))
            {
                result = text.substring(0, endIndex);
                result = result + "...";
                break;
            }   
            else
            {
                endIndex++;
                i++;
            }               
        }while(i <= endIndex);
        System.out.println("Result : " + result);
    }

    public static void main(String... args)
    {
        String text = "Les pirates ont<br/>attaqué des douzaines de sites Web français";
        int endIndex = 6;
        new ClipText().clipString(text, endIndex);
    }
}