0

私は、HTML / XMLファイルを1行から複数​​行(構造化された方法)に縮小するJavaプログラムを作成しています。方法は簡単です。正規表現を使用して、単一の文字列を複数の文字列に分割し、それらの各サブ文字列に改行(\ n)を追加しています。しかし、プログラムは私の単一の文字列をまったく分割できません。any1はこれで私を助けることができますか?以下は私のプログラムです:

package Deminifier;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.InputStreamReader;

public class Deminifier {

    public static void main(String[] args) {

        Deminifier demo = new Deminifier ();
        demo.execute();
    }

    public void execute(){
        BufferedReader br = null;
        String currentLine;
        try {
            br = new BufferedReader(new FileReader("myfile.txt"));


        while((currentLine = br.readLine())!= null){
            System.out.println("Input text is as follows:");
            System.out.println(currentLine);
            Deminifier demo = new Deminifier();
            System.out.println("Output Formatted text is as follows:");
            demo.toDeminify(currentLine);
        }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    private void toDeminify(String currentLine) {
        String lineToParse = currentLine;
        String returnString =null;
        String[] splitString = (lineToParse.split("</([A-Z][A-Z0-9_]*)\b[^>]*>"));
        System.out.println("Number of lines:"+splitString.length);
        for (String s : splitString) {
            System.out.println(s+"\n");
        }

    }
}

誰かがこの問題で私を助けることができますか?文字列配列「splitString」が「1」配列要素だけを返すのはなぜですか?正規表現を試しましたが、アプリケーションの1つで機能します(すべての終了タグを識別できます)。

4

3 に答える 3

0

正規表現は、HTMLがすべて大文字であると想定しているようです。本当にそうですか?

それ以外の場合は、試してください

</([a-zA-Z][a-zA-Z0-9_]*)\b[^>]*>

これは、次のように短く書くこともできます

</[a-zA-Z]\w*?>

(私はそれをテストしていないと思います)

于 2013-03-13T13:30:45.783 に答える
0

ファイルエンコーディングの問題ですか?ファイルがUTF-8を使用しているが、FileReaderがUS-ASCIIを予期している場合は、おそらくこの問題が発生します。

于 2013-03-13T13:15:29.810 に答える
0

コードの問題の1つは、終了タグで分割を行っていることです。これは、返された配列のどの項目にもコードが存在しないことを意味します。おそらく。のようなものを使用したいと思うでしょうreplaceAll。正規表現も少し疑わしいように見えますが、入力ファイルの例を見ることができなければ見分けるのは困難です。

あなたは以下を適応させることができます:

Pattern p = Pattern.compile("</[^>]+>");
while((currentLine = br.readLine())!= null){
    System.out.println("Input text is as follows:");
    System.out.println(currentLine);
    System.out.println("Output Formatted text is as follows:");
    Matcher m = p.matcher(currentLine);
    System.out.println(m.replaceAll("$0\n"));
}

また、ループの内側でインスタンス化する元のコードではDeminifier、それを外側に移動する必要があります。

于 2013-03-13T14:19:36.583 に答える