Pregunta

método de toma boldHighlight cadena de texto y pone de relieve en lo q palabras clave a través de <b></b> etiquetas

método de toma colorHighlight cadena de texto y pone de relieve int q palabras clave a través de <b style='background-color: #color'></b> con colores alternantes 12

String text = "The use of hello as a telephone greeting has been credited to Thomas
               Edison; according to one source, he expressed his surprise with a
               misheard Hullo. Alexander Graham Bell initially used Ahoy (as used on 
               ships) as a telephone greeting"

String keywords = "HELLO Surprise"    

boldHighlight(text, keywords); // will produce:

El uso de <b>hello</b> como un saludo de teléfono se ha acreditado a Thomas Edison; según una fuente, expresó su <b>surprise</b> con un oído mal ¡Hola. Alexander Graham Bell utilizó inicialmente Ahoy (tal como se utiliza en los barcos) como un teléfono greeting`

colorHighlight(text, keywords); // will produce:

El uso de <b style='background-color:#ffff66'>hello</b> como un saludo de teléfono se ha acreditado a Thomas Edison;> de acuerdo con una fuente, que ha mostrado su <b style='background-color:#a0ffff'>surprise</b> con un oído mal ¡Hola. Alexander Graham Bell utilizó inicialmente Ahoy (tal como se utiliza en los barcos) mientras que las tarjetas de teléfono


La pregunta:

¿hay algo que podría utilizar como biblioteca de terceros que hacer el trabajo similar a los métodos de fuelle? O si nos fijamos en el código, ¿hay algo que se puede mejorar, para hacer el mejor rendimiento y / o hacer que sea más elegante? `


private static final String[] colors = new String[]{"ffff66", "a0ffff", "99ff99", "ff9999", "ff66ff", "880000", "00aa00", "886800", "004699", "990099", "ffff66", "a0ffff"};

public static String safeCharWithSpace(String input) {
    input = input.trim();
    return Normalizer.normalize(input.toLowerCase(), Normalizer.Form.NFD)
            .replaceAll("\\p{InCombiningDiacriticalMarks}+", "")
            .replaceAll("[^\\p{Alnum}]+", " ");
}

private static String prepQuery(String q) {
    try {
        log.debug("qr encoded: " + q);
        q = URLDecoder.decode(q, "UTF-8");
    } catch (UnsupportedEncodingException ignore) {
    }
    log.debug("qr decoded: " + q);

    return removeIgnoreCase(q, stopWords);
}

public static String boldHighlight(String text, String q) {
    return highlight(text, q, false);
}

public static String colorHighlight(String text, String q) {
    return highlight(text, q, true);
}

private static String replaceWord(String text, String keyword, int colorNumber, boolean useColor) {
    String color = "";
    keyword = safeCharWithSpace(keyword);
    if (StringUtils.isNotEmpty(keyword) && !StringUtils.isWhitespace(keyword)) {
        if (useColor) color = " style='background-color: " + colors[colorNumber] + "'";
        return text.replaceAll("(?i)(" + keyword + ")(?!([^<]+)?>>)", "<b" + color + ">$1</b>");
    } else
        return text;
}

public static String highlight(String text, String q, boolean useColor) {
    String qr = prepQuery(q);
    String rtn = null;
    int i = 0;

    if (qr.startsWith("\"")) {
        String keywords = StringUtils.remove(qr, "\"");
        rtn = replaceWord(text, keywords, 0, useColor);
    } else {
        String[] keywords = qr.split("\\s");
        for (String keyword : keywords) {
            rtn = replaceWord(text, keyword, i, useColor);
            if (useColor) {
                if (i < 11) i++;
                else i = 0;
            }
        }
    }
    return rtn;
}

para la eliminación de palabras vacías removeIgnoreCase() en el método prepQuery() referirse a mi otro post: Extracción de cadenas de otra cadena en Java

¿Fue útil?

Solución

Vaya, así que podría ir sobre ella un par de maneras diferentes.

  1. llamar a un método estático .

    es decir.

    ${statics["java.lang.System"].currentTimeMillis()} 
    
  2. Lo MVC para hacer sería hacer esto procesamiento antes de que la plantilla se procesa, pero sé que su simplemente mantener el código.

Parece que sólo está haciendo varias reemplazar todos de, por lo que un cambio a un método Java debería funcionar. Tengo que suggesst nos fijamos en las Escapar herramientas Freemarker tiene.

Freemarker realmente tiene un gran documentación y muebles empotrados cubre muchas situaciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top