1

文字列メッセージがあるとします。

「file.zipをhttps://stackoverflow.com/extremelylonglink.zipではなくhttp://google.com/extremelylonglink.zipにアップロードする必要があります。もう一度やり直してください。」

関数がStringnewmessageに戻るようにしたい:

「file.zipを[2番目のリンクの短縮バージョン]ではなく[最初のリンクの短縮バージョン]にアップロードする必要があります。再試行してください。」

私はすでにURL短縮サービスのコードを持っています。これが、メッセージの最初のURLを置き換えるURL検出コードです。

        if(message.contains("http://") || message.contains("https://")) {
            String regex = "(?i)\\b((?:https?://|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))";
            Matcher m = Pattern.compile(regex).matcher(message);
            if (m.find()) {
                String url = m.group();
                    String shorted = null;      
                        try {       
                             shorted = Shortener.GetShortedISGD(url);                                                                           
                        } catch (IOException e1) {
                            // TODO Auto-generated catch block
                        }
                    }
                    String intercepted = message.replace(url, shorted);
                    e.setMessage(intercepted);
        }

それらすべてをどのように交換しますか?(私はこれの多くにBukkit APIを使用しているので、多くの関数はJavaにありません)。

メッセージを単語の配列に分割し、各単語がURLになるかどうかを評価することを考えています。ただし、それが最適化されていない場合を除きます。

4

1 に答える 1

0

とを使用appendReplacementappendTailます。Java チュートリアルのと、実行しようとしていることに近い別の例を参照してください。

于 2012-11-08T18:15:51.887 に答える