最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

java - Replace every word with tag - Stack Overflow

programmeradmin5浏览0评论

JAVASCRIPT or JAVA solution needed

The solution I am looking for could use java or javascript. I have the html code in a string so I could manipulate it before using it with java or afterwards with javascript.

problem

Anyway, I have to wrap each word with a tag. For example:

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

should be changed to

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

Why?

This will help me use javascript to select/highlight a word. It seems the only way to do it is to use the function highlightElementAtPoint which I added in the JAVASCRIPT hint: It simply finds the element of a certain x,y coordinate and highlights it. I figured that if every word is an element, it will be doable.

The idea is to use this approach to allow us to detect highlighted text in an android WebView even if that would mean to use a twisted highlighting method. Think a bit more and you will find many other applications for this.


JAVASCRIPT hint

I am using the following code to highlight a word; however, this will highlight the whole text belonging to a certain tag. When each word is a tag, this will work to some extent. If there is a substitute that will allow me to highlight a word at a certain position, it would also be a solution.

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

JAVASCRIPT or JAVA solution needed

The solution I am looking for could use java or javascript. I have the html code in a string so I could manipulate it before using it with java or afterwards with javascript.

problem

Anyway, I have to wrap each word with a tag. For example:

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

should be changed to

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

Why?

This will help me use javascript to select/highlight a word. It seems the only way to do it is to use the function highlightElementAtPoint which I added in the JAVASCRIPT hint: It simply finds the element of a certain x,y coordinate and highlights it. I figured that if every word is an element, it will be doable.

The idea is to use this approach to allow us to detect highlighted text in an android WebView even if that would mean to use a twisted highlighting method. Think a bit more and you will find many other applications for this.


JAVASCRIPT hint

I am using the following code to highlight a word; however, this will highlight the whole text belonging to a certain tag. When each word is a tag, this will work to some extent. If there is a substitute that will allow me to highlight a word at a certain position, it would also be a solution.

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;
}
Share Improve this question edited Jun 11, 2012 at 2:03 Sherif elKhatib asked Jun 10, 2012 at 16:13 Sherif elKhatibSherif elKhatib 45.9k16 gold badges90 silver badges107 bronze badges
Add a ment  | 

4 Answers 4

Reset to default 6

Try to use something like

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

Should work, maybe u have to change sth...

var tags = document.body.innerText.match(/\w+/g);
for(var i=0;i<tags.length;i++){
    tags[i] = '<word>' + tags[i] + '</word>';
}

Or as @ThomasK said:

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

But you have to keep in mind: .replace(" ",foo) only replaces the space once. For multiple replaces you have to use .replace(/\s+/g,foo)

And as @ajax333221 said, the second way will include mas, dots and other symbols, so the better solution is the first

JSFiddle example: http://jsfiddle/c6ftq/4/

inputStr = inputStr.replaceAll("(?<!</?)\\w++(?!\\s*>)","<word>$0</word>");

You can try following code,

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() );
    }
}
发布评论

评论列表(0)

  1. 暂无评论