2016-05-11 9 views
0

私は、txtファイルからいくつかのタグを読み取り、フィールドとしてこれらのタグを持つオブジェクトを作成するJavaプログラムを作成しようとしています。私は問題を持っているコードの一部を掲載しています:ループ内のJavaバッファードリーダー

try{ 
     line = reader.readLine(); 
     while(line != null){ 
      if (!line.trim().equals(" ") && line.trim().equals("ITEM_LIST")) { 
        line = reader.readLine(); 
        if (line != null && line.trim().equals("{"))) { 
          line = reader.readLine(); 
          if (line != null) { 
           if (line.trim().equals("ITEM")) { 
            line = reader.readLine(); 
            if (line != null) { 
             if (line.trim().equals("{")) { 
              if (line != null) { 
               line = reader.readLine(); 
               while (!((line.trim().startsWith("ITEM_TYPE ")) { 
                line = reader.readLine(); 
                if((line.trim().startsWith("ITEM_TYPE ")){ 
                 String devType = line.trim().substring(10); 
                } 
               ) 
               if(devType.toLowerCase() == "tv"){ 
                dev = new TV(); 
                line = reader.readLine(); 
                if (line != null){ 
                 if (line.trim().toUpperCase().startsWith("CODE ")) { 
                  dev.setCode(line.substring(5).trim()); 
                 } 
                } 

                line = reader.readLine(); 
                if (line != null){ 
                 if (line.trim().toUpperCase().startsWith("MODEL ")) { 
                  dev.setModelName(line.substring(6).trim()); 
                 } 
                } 

                line = reader.readLine(); 
                if (line != null){ 
                 if (line.trim().toUpperCase().startsWith("MODEL_YEAR ")) { 
                  dev.setYear(line.substring(11).trim()); 
                 } 
                } 

                line = reader.readLine(); 
                if (line != null){ 
                 if (line.trim().toUpperCase().startsWith("MANUFACTURER ")) { 
                  dev.setConstructor(line.substring(13).trim()); 
                 } 
                } 

                line = reader.readLine(); 
                if (line != null){ 
                 if (line.trim().toUpperCase().startsWith("PRICE ")) { 
                  dev.setPrice(Double.parseDouble(line.substring(6).trim())); 
                 } 
                } 

                line = reader.readLine(); 
                if (line != null){ 
                 if (line.trim().toUpperCase().startsWith("PANEL_TYPE ")) { 
                  dev.setType(line.substring(11).trim()); 
                 } 
                } 

                line = reader.readLine(); 
                if (line != null){ 
                 if (line.trim().toUpperCase().startsWith("DIMENSIONS ")) { 
                  dev.setSize(line.substring(11).trim()); 
                 } 
                } 

                line = reader.readLine(); 
                if (line != null){ 
                 if (line.trim().toUpperCase().startsWith("RESOLUTION ")) { 
                  dev.setResolution(line.substring(10).trim()); 
                 } 
                } 

                line = reader.readLine(); 
                if (line != null){ 
                 if (line.trim().toUpperCase().startsWith("INTERFACES ")) { 
                  dev.setPorts(line.substring(10).trim()); 
                 } 
                } 

                line = reader.readLine(); 
                if (line != null){ 
                 if (line.trim().toUpperCase().startsWith("PIECES ")) { 
                  dev.setPieces(line.substring(7).trim()); 
                 } 
                } 

私の質問は、特定のアイテム(例えばテレビ)の作成方法を、私はすべての最初のタグITEM_TYPEを読み取るために、コードを変更することができますし、他のすべてのタグを読み取り、オブジェクトを完成させます。 txtファイル内のタグの順序は特定ではなく、タグがない場合、フィールドはデフォルト値になります。ここにtxtファイルがあります:

ITEM_LIST 
{ 
ITEM 
{ 
    CODE ADLS443 
    ITEM_TYPE tv 
    MODEL IDL32KJX4300 
    MODEL_YEAR 2016 
    MANUFACTURER Samsung 
    PRICE 350 
    PANEL_TYPE LCD 
    DIMENSIONS 32 
    RESOLUTION "Full HD" 
    INTERFACES "HDMI USB SCART" 
    PIECES 43 
} 
ITEM 
{ 
    CODE KD444211 
    ITEM_TYPE tv 
    MODEL KDL49DDR4600 
    MODEL_YEAR 2014 
    MANUFACTURER Sony 
    PRICE 600 
    PANEL_TYPE LED 
    DIMENSIONS 49 
    RESOLUTION "Ultra HD" 
    INTERFACES "HDMI USB SCART Ethernet WiFi" 
    PIECES 8 
} 
ITEM 
{ 
    CODE 2445DBS41 
    ITEM_TYPE blueray 
    MODEL JVX44R32 
    MODEL_YEAR 2012 
    MANUFACTURER LG 
    PRICE 250 
    RESOLUTION 1080p 
    FORMAT BR-W 
    PIECES 12 
} 

コードに関する情報がない場合は、ごめんなさい。

+0

if(!line.trim()。equals( "")if(line.trim()。equals( "ITEM_LIST")) )&& line.trim()。equals( "ITEM_LIST")){ –

+0

if(line!= null){if(line.trim()。equals( "{")){同様にend演算子を使用します他に何も持っていないよ –

+0

まず最初に、あなたの最初のコメントで何を意味するのか分かりません。第二に、あなたのコメントは私の質問に全く答えませんし、最後に私はコードの一部を投稿していると言っているので、私のif文は実行されていないため、終了演算子は使用しません。 –

答えて

0

短い回答 - できません。

ITEMのすべてを読んで、ITEM_TYPEを抽出し、必要なオブジェクトを作成し、それを残りのデータで埋めてください。

また、あなただけがreader.readLine()を行い、一般的にあなたがifのネストの高いレベルを持っていませんので、状態マシンとしてコードを書き換える直後、一度line.trim()を行うことをお勧めします。

関連する問題