2016-05-04 10 views
0

私は最初のプロジェクトとしてクラスに分割して書いたJavaコードを単純化しようとしています。私は、私は以下の本を作成したが、私はエラーを取得し続けるマークされた時点で、これには非常に新しいです:クラスのコンストラクタがクラスで表示されない

Syntax error on token ";", { expected after this token 

import java.util.ArrayList; 
import java.util.LinkedHashMap; 
import java.util.List; 
import java.util.Map; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class TxtExtr_AnatomyRegex { 
private String x; 
private Map<String,String> map= new LinkedHashMap<String,String>(); 
private String [] seAnatomy=null; 
private ArrayList<String> Anatomy_arr = new ArrayList<String>(); 
private ArrayList<List<String>> Anatomy_table2d = new ArrayList<List<String>>(); 
String el[]=null; 

    public TxtExtr_AnatomyRegex(String x,Map<String,String> map) { 
     // TODO Auto-generated constructor stub 
     x=this.x; 
     map=this.map; 
    } 
    Pattern Anatomy_pattern = Pattern.compile("Anatomy\\*(.*?Hiatal hernia[^\n]*)",Pattern.DOTALL); 
    Matcher matcherAnatomy_pattern = Anatomy_pattern.matcher(x); /////////////////////////////////ERROR IS HERE 

    while (matcherAnatomy_pattern.find()) { 
     seAnatomy=matcherAnatomy_pattern.group(1).split("\\n|\\r"); 
    } 

    for (int ise=0;ise<seAnatomy.length;ise++){ 
     Anatomy_arr.add(seAnatomy[ise]); 
    } 
    for (String ss:Anatomy_arr){ 
    ArrayList<String> tbb = new ArrayList<String>(); 
    el=ss.split("\\t"); 
     for (String e:el){ 
      if(!e.isEmpty()){ 
       tbb.add(e.trim()); 
      } 
     } 
      if(!tbb.isEmpty()){ 
      Anatomy_table2d.add(tbb); 
      for (int ff=0;ff<Anatomy_table2d.size();ff++){ 
        //Symptom 
       map.put("SumAnatomy"+Anatomy_table2d.get(ff).get(0),Anatomy_table2d.get(ff).get(1)); 
         } 
      } 
    } 
    System.out.println(Anatomy_table2d); 

} 
} 

私は「クラスについてお読み初心者」タイプのコメントの多くを得るでしょう感謝します.. ..(と私は感謝しています)....しかし、私はMatcher matcherAnatomy_pattern = Anatomy_pattern.matcher(x);を宣言された変数に入れなければならないという問題があると思います。私はこれが目に見えないという別のエラーを出すためだけに行った。どのような基本的なコンセプトが私はここで欠けている?

答えて

1

コンストラクタの後に書いたものはすべて、コンストラクタまたは別のメソッドでエンキャプシュレーションする必要があります。クラスの属性として、anatomy_patternなどを使用できます。

public class TxtExtr_AnatomyRegex { 
    private String x; 
    private Map<String,String> map= new LinkedHashMap<String,String>(); 
    private String [] seAnatomy=null; 
    private ArrayList<String> Anatomy_arr = new ArrayList<String>(); 
    private ArrayList<List<String>> Anatomy_table2d = new  ArrayList<List<String>>(); 
    String el[]=null; 
    Pattern Anatomy_pattern = null; 
    Matcher atcherAnatomy_pattern = null; 

    public TxtExtr_AnatomyRegex(String x,Map<String,String> map) { 
     // TODO Auto-generated constructor stub 
     x=this.x; 
     map=this.map; 

     Anatomy_pattern = Pattern.compile("Anatomy\\*(.*?Hiatal hernia[^\n]*)",Pattern.DOTALL); 
     matcherAnatomy_pattern = Anatomy_pattern.matcher(x); /////////////////////////////////ERROR IS HERE 

     //...put here your for and while stuff 

     }//end of the constructur 


     //... some methods ... you maybe also can do something of the loops in methods 

    } //end of the class 
1

online java compiler IDEの適切な形式のコード。

問題は、whileなどの制御構造がメソッド内にのみ存在できることです。この場合、クラスブロック内に直接追加しています。

コンストラクタに続く行をメソッド内にラップし、コンパイルします。

補足として、私はJavaコーディングスタイルのガイドに従うようアドバイスします。

public class TxtExtr_AnatomyRegex { 
    private String x; 
    private Map<String,String> map= new LinkedHashMap<String,String>(); 
    private String [] seAnatomy=null; 
    private ArrayList<String> Anatomy_arr = new ArrayList<String>(); 
    private ArrayList<List<String>> Anatomy_table2d = new ArrayList<List<String>>(); 
    String el[]=null; 

    public TxtExtr_AnatomyRegex(String x, Map<String,String> map) { 
    // TODO Auto-generated constructor stub 
    x=this.x; 
    map=this.map; 
    } 

    public void doSomething() { 
    Pattern Anatomy_pattern = Pattern.compile("Anatomy\\*(.*?Hiatal hernia[^\n]*)",Pattern.DOTALL); 
    Matcher matcherAnatomy_pattern = Anatomy_pattern.matcher(x); 
    // and other code also here 
    } 
} 
関連する問題