मैं नीचे दिए गए इनपुट टेक्स्ट फ़ाइल के लिए regex और hashmap का उपयोग करके होस्ट नाम और उसी होस्ट से अनुरोधों की संख्या कैसे प्राप्त कर सकता हूं:

इनपुट.txt

     unicomp6.unicompt.net - - [01/JUL/1995:00:00:06 - 0400] "GET /shuttle/countdown/ HTTP/1.0" 200 3985     
     burger.letters.com - - [01/JUL/1995:00:00:12 - 0400] "GET /shuttle/countdown/ HTTP/1.0" 200 0
     d104.aa.net - - [01/JUL/1995:00:00:13 - 0400] "GET /shuttle/countdown/ HTTP/1.0" 200 3985 
     unicomp6.unicompt.net - - [01/JUL/1995:00:00:14 - 0400] "GET /shuttle/countdown/ HTTP/1.0" 200 40310
     d104.aa.net - - [01/JUL/1995:00:00:15 - 0400] "GET /shuttle/countdown/ HTTP/1.0" 200 40310 
     d104.aa.net - - [01/JUL/1995:00:00:15 - 0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786
     unicomp6.unicompt.net - - [01/JUL/1995:00:00:14 - 0400] "GET /shuttle/countdown/ HTTP/1.0" 200 786 
     unicomp6.unicompt.net - - [01/JUL/1995:00:00:14 - 0400] "GET /shuttle/countdown/ HTTP/1.0" 200 1204 

वांछित आउटपुट:

   unicomp6.unicompt.net 4
   burger.letters.com 1
   d104.aa.net 3
0
bro 20 फरवरी 2020, 00:06
1
ऐसे सामान्य पैटर्न देखें जिनके चारों ओर आप टेक्स्ट थूक सकते हैं, उदाहरण के लिए - - दोनों यूआरएल के बीच एक सामान्य विभाजक की तरह लगता है और वहां जानकारी का अनुरोध करता है
 – 
MadProgrammer
20 फरवरी 2020, 00:07

2 जवाब

रेगेक्स का उपयोग क्यों नहीं कर रहे हैं?

public static void main(String[] args) {
    Pattern pattern = Pattern.compile("\\w+\\.\\w+\\.\\w+", Pattern.DOTALL);
    String input = "unicomp6.unicompt.net - - [01/JUL/1995:00:00:06 - 0400]"+
                    "burger.letters.com - - [01/JUL/1995:00:00:12 - 0400] .... etc";

    Matcher m = pattern.matcher(input);
    while (m.find()) {
      String s = m.group();
      System.out.println(s);  
    }
}
2
Themelis 20 फरवरी 2020, 01:00
लेकिन कैसे गिनें?? यह केवल होस्ट नाम लौटाएगा न कि उसी होस्ट से अनुरोध की गणना।
 – 
bro
20 फरवरी 2020, 03:14
आप unicomp6.unicompt.net 4 के अंदर 4 के बारे में कैसे आए?
 – 
Themelis
20 फरवरी 2020, 04:41
क्योंकि "unicomp6.unicompt.net" से अनुरोध लॉग में 4 गुना है
 – 
bro
20 फरवरी 2020, 19:03
क्या इसे input.txt के अंदर के डेटा से देखा जा सकता है?
 – 
Themelis
20 फरवरी 2020, 19:09

आप इसे आजमा सकते हैं (जावा 8 और उसके बाद के लिए):

public static void main(String[] params) throws IOException {

    try (Stream<String> lines = Files.lines(Paths.get("src/main/resources/input.txt"))) {

        Map<String, Integer> occurrences = new HashMap<>();
        lines.map( line -> line.split(" ") )
             .forEach( splitted -> {
                 occurrences.merge(splitted[0], 1, Integer::sum);
             } );

        System.out.print( occurrences );
    }

}

बस अपनी txt फ़ाइल के पथ के लिए सावधान रहें

0
Alex Andrade 20 फरवरी 2020, 00:17
आउटपुट है: {burger.letters.com=1, d104.aa.net=3, unicomp6.unicompt.net=4}
 – 
Alex Andrade
20 फरवरी 2020, 00:18
धन्यवाद, यह काम किया लेकिन मैं जावा 7 के साथ काम कर रहा हूं, इसलिए यदि आप इसके लिए समाधान प्रदान कर सकते हैं।
 – 
bro
20 फरवरी 2020, 00:30