我试图将英文网页重新生成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;
}
}
.
答案 0 :(得分:0)
根据我的理解,您可以使用散列图来存储标记和内容对。 HashMap将字符串作为键,arraylist作为值。
要获取标记,您可以使用inputLine.split(“&gt;”)之类的内容并获取第一部分。 由于可以有许多具有相同名称的标记,例如
还有一件事要补充,因为你是逐行读取文件,有时可能会发生在下一行中的结束标记。例如...... 我不知道如何将代码放入编辑器
在这种情况下,您的程序将无法运行。您可以使用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;
}
}