Строка отсечения для данного индекса - PullRequest
1 голос
/ 05 марта 2012

У меня есть строка, и я хочу обрезать ее по заданному индексу.В этом сценарии строка может содержать тег 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 ]

1 голос
/ 05 марта 2012

Возникает небольшая путаница, что если в тексте написано "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);
    }
}
1 голос
/ 05 марта 2012

Разбор html не простая задача. HTML не является обычным языком, поэтому регулярное выражение не поможет вам ... Тем не менее, htmlunit может оказаться полезным. Также проверьте опции для удаления HTML

Удачи!

...