2017-08-04 10 views
0

のHTMLファイルのコードサンプルをExcelファイルにその内容を保存します。のJava読むhtmlファイルと

<HTML> 
<HEAD> 
<TITLE>REPORT</TITLE></HEAD> 
<BODY> 
<TITLE>REPORT</TITLE><PRE><H2>################ REPORT ###################</H2><H3>Setup</H3> Item1     1120          <br> Item2     Copy free         <br> Item3     8/3/2017 5:44:51 AM      <br> Item4     <Press OK>       <br> 

私は読むために必要な情報が<br>と線です。目標はenter image description here

以下

のようなExcelファイルにこれらの情報を保存することです私は現在、htmlファイルを読むためにBufferedReaderのを使用しますが、私は、フィールドと値を含む行を分離する方法を知りません。フィールド名と値を保存するためにhashmapを使用しようとしていましたが、正しい方法で値を取得できません。私はまた、HTMLタグを取り除くためにJsoupを試してみましたが、それは私に

private final String[] modStrings = new String[]{"Item1", "Item2", "Item3", "Item4", "Item5"}; 

public void readHtmlFile() throws IOException { 
     FileReader reader = new FileReader("C:\\Users\\file.html"); 
     // StringBuilder sb = new StringBuilder(); 
     BufferedReader br = new BufferedReader(reader); 
     String line; 
     String[] tempContent = {}; 
     ArrayList content = new ArrayList(); 
     HashMap modMap = new HashMap<>(); 
     while ((line=br.readLine()) != null) { 
      tempContent = line.split("<br>"); 
      for(int i = 0; i < tempContent.length; i++){ 
       for (String sub:modStrings){ 
        if(tempContent[i].contains(sub)){ 
         String value = "TODO HERE"; // TODO 
         content.add(sub); 
         modMap.put(sub, value); 
        } 
       } 

      } 
     } 
//  String textOnly = Jsoup.parse(sb.toString()).text(); 
     for(int i = 0; i < content.size(); i++){ 
      System.out.println(content.get(i)); 
      System.out.println(modMap); 
     } 
    } 

任意の提案やアイデアは多くの助けになるhtmlファイルので、ラインを読むために、より複雑になります。

+0

:こちらをたとえば、私はあなたのために簡単なトリックに

サンプルコードを実行するために... or subString'トリムsplit(String regex)、[split(String regex, int limit)](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String,%20int)),を使用していますbr ")'はあなたが望むものをあなたに与えません。 'Item'と値を得るには' space'と 'split'を使うべきです。 –

+0

String [] keyVal = s.trim()。split(" + ");を使うことができます。値= keyVal [1]; key = keyVal [0]; – CodeIsLife

+0

@TuyenNguyen、私はsplit( "")を使うことはできません。いつか値にもスペースが含まれているので、スペースで区切っても私が望む値に分割されます。 (たとえば、無料でコピーして、2011年8月3日5:44:51 AM) –

答えて

0

解決策はあなたのHTMLコンテンツに基づいてStringクラスのutil関数を使用するだけで、目的のコンテンツを取得するのに適した方法を使用するだけで簡単です。 < "(`スプリットを使用して、上記のあなたのHTML構造で

public static void main(String[] args) throws IOException { 
     String[] modStrings = new String[] { "Item1", "Item2", "Item3", "Item4", "Item5" }; 
     FileReader reader = new FileReader("html.html"); 
     BufferedReader br = new BufferedReader(reader); 
     String line; 
     String[] tempContent = {}; 
     ArrayList content = new ArrayList(); 
     HashMap<String, String> modMap = new HashMap<>(); 
     while ((line = br.readLine()) != null) { 
     if (line.contains("<br>")) { 
      line = line.substring(line.indexOf("Item1")); 
      tempContent = line.split("<br>"); 
      for (String item : tempContent) { 
       if (item.contains("Item")) { 
        String[] itemArr = item.trim().split(" ", 2); 
        String itemName = itemArr[0].trim(); 
        String value = itemArr[1].trim(); 
        modMap.put(itemName, value); 
       } 
      } 
     } 
     } 
     for(String key : modMap.keySet()){ 
      System.out.println(key + ":" + modMap.get(key)); 
     } 
    } 
+0

申し訳ありませんが、このコードは正しく動作しません。自分のhtmlファイルを元の形式に更新しました。古いhtmlサンプルは、より良いビジョンを提供することを目指していますが、私はpplに質問を誤解させてしまったと思います。 if条件が正しく機能しません。同様にif条件内のステートメント。 –

+0

コードで構成されていても説明がない回答は、一般にスタックオーバーフローでは歓迎されません。このコードがOPの要件を満たすと思われる理由を説明できますか? –

+0

@MinwuYu新しいhtml形式のコードを更新しました。以前のコードは、HTMLコードを変更したため実行されません。あなたはあなたが内容を読むことについての助けを得たいと思うことを知っている必要がありますあなたは正確に内容を投稿する必要があります –