Java 将字符串剪切到给定索引

Java 将字符串剪切到给定索引,java,string,word,truncate,html,Java,String,Word,Truncate,Html,我有一个字符串,我想在给定的索引处剪切它。在这个场景中,字符串可能包含HTML标记,我必须在剪切时跳过这些标记 例如,如果字符串为: "Les pirates ont<br/>attaqué des douzaines de sites Web français"; “法兰西网站附件”; 我想把它剪成25码,这样我就可以得到Les pirates ontattaqué…。此外,我不能从中间切分一个单词,而在剪切时,如果我得到剪切点处的字符不是空格,那么我必须从该点回溯字符串,直到

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

例如,如果字符串为:

"Les pirates ont<br/>attaqué des douzaines de sites Web français";
“法兰西网站附件”;
我想把它剪成25码,这样我就可以得到
Les pirates ont
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();
    }
}
公共类测试{
private String value=“Les pirates ont
attaquédes douzaines de sites de français”; 私人int clipAt=25; 公开考试(){ run(); } 私家车{ 字符串省略=“…”; int originalLength=value.length(); int cliplength=clipAt-elipsis.length(); 字符串clipedValue=value; 如果(原始长度>剪辑长度){ char character=value.charAt(cliplength+1); while(字符!=''){ 如果(字符=='>'){ cliplength+=count(value.substring(0,cliplength+2)); } cliplength=cliplength-1; character=value.charAt(cliplength+1); } clipedValue=value.substring(0,cliplength+1)+省略; } 系统输出打印项次(clipedValue); } 私有整数计数(字符串str){ int length=str.length()-1; 字符=str.charAt(长度); 整数计数=0;
虽然(character!='解析html不是一件容易的任务。html不是常规语言,所以正则表达式对您没有帮助。。。 不过,您可能会发现有帮助。也请检查


祝你好运!

如果文本是说
“我今天感觉太好了。”
,现在假设我说clip在14,那么我是不是应该返回这个字符串
“我感觉…”
或者其他什么

尝试此代码,希望此代码可以解决以下问题:

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);
    }
}
公共类ClipText
{
私有void剪辑字符串(字符串文本,int-endIndex)
{
int i=结束索引;
字符串结果=新字符串();
做
{
if(Character.isWhitespace(text.charAt(endIndex)))
{
结果=text.substring(0,endIndex);
结果=结果+“…”;
打破
}   
其他的
{
endIndex++;
i++;
}               
}而