2012-03-05 14 views
1

私は文字列を持っており、指定されたインデックスでクリップしたいと思います。シナリオでは、文字列にHTMLタグが含まれている可能性があり、クリッピング中にこれらのタグをスキップする必要があります。例えば指定されたインデックスへの文字列のクリッピング

文字列の場合:

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

と私はLes pirates ont<br/>attaqué...を得ることができるように、25でそれをクリップします。また、私は中間から単語をスライスすることはできませんが、クリッピングポイントの文字がスペースでない場合、スペースを見つけることができなくなるまで、そのポイントからストリングをバックトラックしなければなりません。スペースが見つかったら、そのインデックスまでカットします。ここで

は、私が試したコードですが、それは無限ループしている:

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

すべての情報は私にとって非常に参考になります。

ありがとうございました。

答えて

1

構文解析htmlは簡単な作業ではありません。 HTMLは正規言語ではないので、正規表現はあなたを助けません... しかし、htmlunitが役に立ちます。チェックしてくださいthe options for HTML scrapping

幸い!

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); 
    } 
} 
関連する問題