4

JAVASCRIPT または JAVA ソリューションが必要

私が探しているソリューションは、java または javascript を使用できます。文字列にhtmlコードがあるので、javaで使用する前に、または後でjavascriptで操作できます。

問題

とにかく、各単語をタグで囲む必要があります。例えば:

<html> ... >
Hello every one, cheers
< ... </html>

に変更する必要があります

<html> ... >
<word>Hello</word> <word>every</word> <word>one</word>, <word>cheers</word>
< ... </html>

なんで?

これは、JavaScript を使用して単語を選択/強調表示するのに役立ちます。それを行う唯一の方法は、JAVASCRIPT ヒントに追加した関数 highlightElementAtPoint を使用することのようです。特定の x、y 座標の要素を見つけて強調表示するだけです。すべての単語が要素である場合、それは実行可能であると考えました。

アイデアは、このアプローチを使用して、ねじれた強調表示方法を使用することを意味する場合でも、Android WebView で強調表示されたテキストを検出できるようにすることです。もう少し考えてみると、これに関する他の多くのアプリケーションが見つかります。


JAVASCRIPT ヒント

次のコードを使用して単語を強調表示しています。ただし、これにより、特定のタグに属するテキスト全体が強調表示されます。各単語がタグの場合、これはある程度機能します。特定の位置で単語を強調表示できる代替手段があれば、それも解決策になります。

function highlightElementAtPoint(xOrdinate, yOrdinate) {
    var theElement = document.elementFromPoint(xOrdinate, yOrdinate);
    selectedElement = theElement;
    theElement.style.backgroundColor = "yellow";
    var theName = theElement.nodeName;
    var theArray = document.getElementsByTagName(theName);
    var theIndex = -1;
    for (i = 0; i < theArray.length; i++) {
        if (theArray[i] == theElement) {
            theIndex = i;
        }
    }
    window.androidselection.selected(theElement.innerHTML);
    return theName + " " + theIndex;
}
4

4 に答える 4

6

次のようなものを使用してみてください

String yourStringHere = yourStringHere.replace(" ", "</word> <word>" )
yourStringHere.replace("<html></word>", "<html>" );//remove first closing word-tag

うまくいくはずです、多分あなたはsthを変える必要があります...

于 2012-06-10T16:23:50.343 に答える
4
var tags = document.body.innerText.match(/\w+/g);
for(var i=0;i<tags.length;i++){
    tags[i] = '<word>' + tags[i] + '</word>';
}

または@ThomasKが言ったように:

var tags = document.body.innerText;
tags = '<word>' + tags + '</word>';
tags = tags.replace(/\s/g,'</word><word>');

ただし、覚えておく必要があります.replace(" ",foo)。スペースは一度だけ置き換えられます。複数の置換の場合は、使用する必要があります.replace(/\s+/g,foo)

@ ajax333221が言ったように、2番目の方法にはコンマ、ドット、その他の記号が含まれるため、最初の方法がより良い解決策です

JSFiddle の例: http://jsfiddle.net/c6ftq/4/

于 2012-06-10T16:25:53.863 に答える
2

次のコードを試すことができます。

import java.util.StringTokenizer;


public class myTag 
{
    static String startWordTag = "<Word>";
    static String endWordTag = "</Word>";
    static String space = " ";

    static String myText = "Hello how are you ";

    public static void main ( String args[] )
    {
        StringTokenizer st = new StringTokenizer (myText," ");

        StringBuffer sb = new StringBuffer();

        while ( st.hasMoreTokens() )
        {
            sb.append(startWordTag); 
            sb.append(st.nextToken());
            sb.append(endWordTag);
            sb.append(space);
        }

        System.out.println ( "Result:" + sb.toString() );
    }
}
于 2012-06-10T16:36:25.893 に答える
2
inputStr = inputStr.replaceAll("(?<!</?)\\w++(?!\\s*>)","<word>$0</word>");
于 2012-06-10T16:31:22.583 に答える