1

このテキスト「 text1 [example1]http://example1.com [example2]http://example2.com text2 ....」を取得し、次のように返す Java コードが必要です。

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、最初と2番目の括弧でキャプチャされたものを見つけるために使用されます。

角かっこと一致させたくない場合、たとえば、その後に続く角かっこだけの場合http://は、2番目の角かっこをに変更(.*?)(http://.*?)ます。

于 2012-09-06T08:59:28.900 に答える
0

URL を手動で解析するのではなく、jsoupのような URL パーサー ライブラリを試す必要があります。

于 2012-09-06T09:11:06.030 に答える