1

ここでの私の目標は、URL 短縮サービスを作成することであり、1 行に 2 つの URL を入力する場合を除いて機能しています。

たとえば、「laskjdflas www.google.com lakdsjfsa www.google.ca」と入力すると、次のような応答が返されます。

短縮する URL を入力してください

laskjdf www.google.ca lksadjf www.google.com

laskjdf http://aman207.tk/9 lksadjf http://aman207.tk/9

laskjdf htt://aman207.tk/-4gi5 lksadjf htt://aman207.tk/-4gi5

(最後の 2 つのリンクに ap がないことはわかっています)

これは私のコードです:

Scanner keyboard=new Scanner(System.in);
System.out.println("Please enter in a URL to shorten");
URLget=keyboard.nextLine();
String originalMessage=URLget;

Pattern p = Pattern.compile("(?i)\\b((?:https?://|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))");
Matcher m = p.matcher(URLget);
StringBuffer sb = new StringBuffer();
while (m.find())
{
   URLget=m.group(1);
   m.appendReplacement(sb, "");
   sb.append(URLget);
   m.appendTail(sb);
   String URL="http://www.aman207.tk/yourls-api.php?signature=0a88314b95&action=shorturl&url="+ URLget;
   if (URLget.startsWith("http://")||URLget.startsWith("www."))
   {
       try {
           DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
           DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
           Document doc = docBuilder.parse(new InputSource(new URL(URL).openStream()));

           NodeList nodeList = doc.getElementsByTagName("shorturl");

           for (int temp = 0; temp < nodeList.getLength(); temp++)
           {
               Node nNode = nodeList.item(temp);
               Element eElement = (Element) nNode;
               if(eElement.getAttribute("shorturl") != null)
               {
                   String findShortURL= eElement.getTextContent();
                   String finalMessage = originalMessage.replaceAll("(?:http://|www.?)[\\w/%.-]+", findShortURL);
                   System.out.println(finalMessage);
               }
            }
        }
    }
}

そのために必要なことは、各 URL を 1 行で置き換えることです。誰か提案はありますか?ありがとう!

編集:

入力: ランダムな単語 [短縮する URL (URL 1 )] さらにランダムな単語 [短縮する URL (URL 2 )]

出力:

同じランダムな単語 [短縮 URL 1 ] 同じランダムな単語 [短縮 URL 1 (最初の URL と同じ短縮 URL です。期待される出力のようにする必要があります)]

期待される出力:

同じランダムな単語 [短縮 URL 1 ] 同じランダムな単語 [短縮 URL 2 ]

4

2 に答える 2

1

ifステートメントを次のように置き換えます。

if(eElement.getAttribute("shorturl") != null)
{                      
    String findShortURL= eElement.getTextContent();
    originalMessage = originalMessage.replaceAll(URLget, findShortURL);
    System.out.println(originalMessage);
}

printlnループの外側で使用forして、一度だけ出力を取得します。

于 2013-06-12T05:37:37.503 に答える
0

私は自分でそれを理解しました。

これは作業コードです

Pattern p = Pattern.compile("(?i)\\b((?:https?://|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))");
Matcher m = p.matcher(URLget);
StringBuffer sb = new StringBuffer();  
while (m.find())  
     {  
        URLget=m.group(1);  
        String URL="http://www.aman207.tk/yourls-api.php?signature=0a88314b95&action=shorturl&url="+ URLget;
        if (URLget.startsWith("http://")||URLget.startsWith("www."))
    {
        try {               
            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
            Document doc = docBuilder.parse(new InputSource(new URL(URL).openStream()));

            NodeList nodeList = doc.getElementsByTagName("shorturl");

            for (int temp = 0; temp < nodeList.getLength(); temp++) {

                Node nNode = nodeList.item(temp);
                Element eElement = (Element) nNode;
                if(eElement.getAttribute("shorturl") != null)
                {
                    URLget=eElement.getTextContent();

                }
                else
                {

                }

            }

    }

       catch (IOException e) {
        e.printStackTrace();
        System.err.println("Error occured");
    }  catch (SAXException e) {
        System.err.println("You either entered in an invalid URL, or our URL shortener services are down. Please try again.");
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    }
    }
    else
    {

    }
    m.appendReplacement(sb, "");
    sb.append(URLget);

     }
    m.appendTail(sb);
    return (sb.toString());
于 2013-06-12T21:03:42.410 に答える