1

我需要一个 Java 代码来获取此文本“ text1 [example1]http://example1.com [example2]http://example2.com text2 ....”并将其返回如下:

text1 <a target='_blank' href='http://example1.com'>example1</a> <a target='_blank' href='http://example2.com'>example2</a> text2

我的意思是每当它在文本中找到此模式 [example2]http://example2.com 并将其放入 html 超链接中。请帮助..我到目前为止所做的但它不起作用

    ViolationTableItem item = new ViolationTableItem(m_violation);
    String dataSource = "";
     String copyDataSource="";
    try {
        dataSource = item.getUi().getViolation().getBlackListEntries()
                .getDataSources();

        Matcher matcher = Pattern.compile(
                "(\\[.*?\\])(.*://[^<>[:space:]]+[[:alnum:]/])").matcher(
                dataSource);

        while (matcher.find()) {

            String matchedLink = matcher.group();

            Matcher nameMatcher = Pattern.compile("\\[.*?\\]").matcher(
                    matchedLink);
            String nameMatched = "";
            String nameMatched2 = "";
            String linkableText = "";
            String[] tst = matchedLink.split("\\[.*?\\]");
            for (int i = 1; i < tst.length; i++) {
                if (nameMatcher.find()) {
                    nameMatched = nameMatcher.group();
                    // System.out.println(nameMatched);
                    nameMatched2 = matchedLink.replace(nameMatched, "");
                    // System.out.println(nameMatched2);

                }
                if (tst[i] != null && !tst[i].equals("")) {
                    linkableText = "<a target='_blank' href='"
                            + tst[i]
                            + "'>"
                            + nameMatched.replaceAll("\\[", "").replaceAll(
                                    "\\]", "") + "</a>";
                    copyDataSource += dataSource.replace(matchedLink,
                            linkableText) + " ";
                }
            }

        }
    } catch (Exception ne){
        return copyDataSource;
    }
    return copyDataSource;

提前致谢!

4

2 回答 2

1

您可以通过以下方式轻松做到这一点String.replaceAll()

String text = " text1 [example1]http://example1.com [example2]http://example2.com text2 ....";
String link = "<a target='_blank' href='$2'>$1</a>";
String newText = text.replaceAll("\\[(.*?)\\](.*?)(?=\\s)", link);
System.out.println(newText);

印刷

text1 <a target='_blank' href='http://example1.com'>example1</a> <a target='_blank' href='http://example2.com'>example2</a> text2 ....

正则表达式查找一对括号,捕获内部和之后的所有内容,直到下一个空格,并将其替换为链接字符串。
$1$2用于查找在第一个和第二个括号中捕获的内容。

如果您不希望它匹配任何括号,例如只匹配后面的括号,http://只需将第二个更改(.*?)(http://.*?).

于 2012-09-06T08:59:28.900 回答
0

与其手动解析 URL,不如尝试使用类似jsoup的 URL 解析器库

于 2012-09-06T09:11:06.030 回答