【问题标题】:Clipping String to a given index将字符串剪切到给定的索引
【发布时间】:2012-03-05 10:02:39
【问题描述】:

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

例如,如果字符串是:

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

我想把它剪成 25 点,这样我就可以得到Les pirates ont&lt;br/&gt;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();
    }
}

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

谢谢。

【问题讨论】:

    标签: java string word truncate html


    【解决方案1】:

    解析 html 不是一件容易的事。 HTML 不是常规语言,因此正则表达式不会帮助您... 但是,您可能会发现 htmlunit 很有帮助。还要检查the options for HTML scrapping

    祝你好运!

    【讨论】:

      【解决方案2】:

      如果文本是 "I am feeling &lt;html&gt; too good &lt;/html&gt; today.",现在假设我在 14 处说剪辑,那么我应该返回这个字符串 "I am feeling &lt;html&gt;..." 或其他什么?

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

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

      【讨论】:

        猜你喜欢
        • 2021-01-08
        • 1970-01-01
        • 2011-04-30
        • 2013-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多