将HTML标记拆分并存储到Arraylist中

时间:2014-12-04 06:40:22

标签: java html split tags

我试图将英文网页重新生成Sinhala内容。目前我做了部分内容。当用户输入url时,它将加载特定网页的html页面,它将逐行显示为html标记。但现在我想分别拆分html标签和内容,并将它们分别存储在一个数组列表中。我的完整代码如下。任何人都可以分别给出分割html标签和内容的答案,并将它们存储到数组列表中。

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.Scanner;
    import  java.lang.String;   

    public class Utils {
    public static void main(String[] args) {
         String url;
         Scanner sc = new Scanner(System.in);
         System.out.println("Enter the url:");
         url = sc.nextLine();
        try {
            System.setProperty("http.proxyHost", "cache.mrt.ac.lk");
             System.setProperty("http.proxyPort", "3128");

              //Document doc = Jsoup.connect(url).timeout(10000).get();

            URL link = new URL("http://www.nlpu.com/NewDesign/NLPU_WhatIsNLP.html");
            BufferedReader in = new BufferedReader(newht InputStreamReader(link.openStream()));   
            String inputLine;
            String []arr;
            int count=0;
            while ((inputLine = in.readLine()) != null) {
                // Process each line.
                System.out.println("Line no :"+count++);

                //for(int i=0;i<inputLine.length();i++){
                    ArrayList<String> list = new ArrayList<String>();
                    list.add(inputLine);
                     System.out.println();

                //}
                for(int i=0;i<list.size();i++){
                    System.out.println("got: "+list.get(i)); 
                            }
            //  inputLine = inputLine.replaceAll("\\<.*?\\>", "");
                arr = inputLine.split("<.*?.>");

                for(String ss:arr){
                System.out.print("splitted : "+ss+" ");
                }
                System.out.println();
                 // System.out.println(arr[]);
                //System.out.println(arr[2]);
               //String s1=("මම බත් කමි");
              //list.set(0,s1);
             // System.out.println(""+list);

              }

             in.close();

            }catch (MalformedURLException me) {
            System.out.println(me); 

            } catch (IOException ioe) {
            System.out.println(ioe);
            }
            }//end main

            private static String inputLine(int i) {
           // TODO Auto-generated method stub
           return null;
           }
           }
.

2 个答案:

答案 0 :(得分:0)

根据我的理解,您可以使用散列图来存储标记和内容对。 HashMap将字符串作为键,arraylist作为值。

要获取标记,您可以使用inputLine.split(“&gt;”)之类的内容并获取第一部分。 由于可以有许多具有相同名称的标记,例如

  • ,您可以添加多个值并将它们添加到arraylist中并将它们存储在hashmap中。

    还有一件事要补充,因为你是逐行读取文件,有时可能会发生在下一行中的结束标记。例如...... 我不知道如何将代码放入编辑器

    在这种情况下,您的程序将无法运行。您可以使用RandomAccessFile立即将整个文件加载到内存中,然后编写一些算法来搜索结束标记。

  • 答案 1 :(得分:0)

    我认为它会对你有所帮助。我只是编辑了你的代码。确保它的有效方式。

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.Scanner;
    import java.lang.String;
    
    public class Utils {
    
        public static void main(String[] args) {
            String url;
            Scanner sc = new Scanner(System.in);
            System.out.println("Enter the url:");
            // url = sc.nextLine();
            try {
                System.setProperty("http.proxyHost", "cache.mrt.ac.lk");
                System.setProperty("http.proxyPort", "3128");
    
                //Document doc = Jsoup.connect(url).timeout(10000).get();
                URL link = new URL("http://www.nlpu.com/NewDesign/NLPU_WhatIsNLP.html");
                BufferedReader in = new BufferedReader(new InputStreamReader(link.openStream()));
                String inputLine;
                String[] arr;
                int count = 0;
                ArrayList<String> list1 = new ArrayList<String>();
                while ((inputLine = in.readLine()) != null) {
                    // Process each line.
                    // System.out.println("Line no :" + count++);
    
                    //for(int i=0;i<inputLine.length();i++){
                    ArrayList<String> list = new ArrayList<String>();
                    list.add(inputLine);
                    //System.out.println();
    
                    //}
                    for (int i = 0; i < list.size(); i++) {
                        //System.out.println("got: " + list.get(i));
    
                        //  inputLine = inputLine.replaceAll("\\<.*?\\>", "");
                        arr = inputLine.split("<.*?.>");
    
                        for (String ss : arr) {
                            list1.add(ss);
                            //System.out.print("splitted : " + ss + " ");
                        }
                        System.out.println();
                        // System.out.println(arr[]);
                        //System.out.println(arr[2]);
                        //String s1=("මම බත් කමි");
                        //list.set(0,s1);
                        // System.out.println(""+list);
    
                    }
    
                }
                for (String temp : list1) {
    
                    System.out.println("arrayed : " + temp + " ");
                }
                in.close();
    
            } catch (MalformedURLException me) {
                System.out.println(me);
    
            } catch (IOException ioe) {
                System.out.println(ioe);
            }
        }//end main
    
        private static String inputLine(int i) {
            // TODO Auto-generated method stub
            return null;
        }
    }