2016-09-16 5 views
-1

ストリートネームと数字のデータベースを入力する必要があります。 Iは、1つの都市のためにそれを行う必要があると私は、この形式でstreetnamesと完全なリストを有する:
streetname 1
streetname 2
streetname 3
streetname 4
streetname部5a
streetname 20
streetname 22
streetname 24
streetname 27
streetname 29B
streetname 33
などStreetname/numberソートin Java

今、私はこの形式でデータを取得する必要があります。
streetname 1-5
streetname 20-24 E
streetname 27-29 O
streetname 33 O
Oイスト奇数の電子偶数とすべての場合

ご覧のとおり、昇順で書式を設定する必要がありますが、市外局番に改行がある場合は修正する必要があります。 いくつかの数字はまた、私は、バッファリングされたリーダーと私の.txtファイル で読み取る配列リストにテキスト入力を保存してまで、いくつかの正規表現を使用するには、いくつかの基本的なコードを持っている今で終わり

でAからCへの手紙が含まれていますコンソールに出力します。

 import java.io.BufferedReader; 
     import java.io.DataInputStream; 
     import java.io.FileInputStream; 
     import java.io.InputStreamReader; 
     import java.util.ArrayList; 
     import java.util.Arrays; 
     import java.util.List; 
     import java.util.regex.Matcher; 
     import java.util.regex.Pattern; 

     public class test { 

     public static void main(String[] args) { 
       String[] arr= null; 
       String[] hn=null; 

       List<String> strassen = new ArrayList<String>(); 
       List<String> hausnummern = new ArrayList<String>(); 
       String endstr1 = "a"; 
       String endstr2 = "b"; 
       String endstr3 = "c"; 
       String strhn[] = null; 
       int hn2; 
       try 
       { 
        FileInputStream fstream_strassen = new FileInputStream("Straßen.txt"); 
        DataInputStream data_input = new DataInputStream(fstream_strassen); 
        BufferedReader buffer = new BufferedReader(new InputStreamReader(data_input)); 
        FileInputStream fstream_strassen2 = new FileInputStream("Straßen.txt"); 
        DataInputStream data_input2 = new DataInputStream(fstream_strassen2); 
        BufferedReader buffer2 = new BufferedReader(new InputStreamReader(data_input2)); 

        String str_line; 
        String str_line2; 

         while (((str_line = buffer.readLine()) != null) && ((str_line2 = buffer2.readLine()) != null)) 
         {      
          str_line = str_line.trim(); 
          str_line2 = str_line2.trim();      

          if ((str_line.length()!=0) && (str_line2.length()!=0)) 
          { 
           strhn = str_line2.split("\\D+"); 
           strassen.add(str_line); 
           hausnummern.add(str_line2);       
          } 
         }     

        hausnummern.toString(); 
        hn = (String[])hausnummern.toArray(new String[hausnummern.size()]); 
        arr = (String[])strassen.toArray(new String[strassen.size()]);    
       } 
       catch (Exception e) 
       { 
       // Catch exception if any 
        System.err.println("Error: " + e.getMessage()); 
       }   

     for(String s : arr) { 
         Matcher m = Pattern.compile("^(.*?) (\\d*?[a-zA-Z]{0,}?)$").matcher(s); 
         if(m.matches()) {  
          if(m.group(2).endsWith(endstr1)||m.group(2).endsWith(endstr2)||m.group(2).endsWith(endstr3)==true){ 
           hn2 = Integer.parseInt(m.group(2).substring(0, m.group(2).length()-1)); 

            if(m.group(2).endsWith(endstr1) == true){ 

             System.out.printf("%s %s %s\n", m.group(1), hn2, endstr1); 
             /*if(hn2 % 2 != 0){ 
              System.out.printf("%s %s %s\n", str, hn2, endstr1); 
             }*/ 
            } 
            if(m.group(2).endsWith(endstr2) == true){ 

             System.out.printf("%s %s %s\n", m.group(1), hn2, endstr2); 
             /*if(hn2 % 2 != 0){ 
              System.out.printf("%s %s %s\n", str, hn2, endstr2); 
             }*/ 
            } 
            if(m.group(2).endsWith(endstr3) == true){ 

             System.out.printf("%s %s %s\n", m.group(1), hn2, endstr3); 
             /*if(hn2 % 2 != 0){ 
              System.out.printf("%s %s %s\n", str, hn2, endstr3); 
             }*/ 
            }       
          } 
          else{ 
           hn2 = Integer.parseInt(m.group(2)); 
           System.out.printf("%s %s\n", m.group(1), hn2); 
          } 
         } 
        } 
     } 
    } 

私の出力は次のようになります1
Ihmenkampsweg 2
Ihmenkampsweg
Ihmenkampsweg 2 B
Ihmenkampsweg 4
Ihmenkampsweg 5
Ihmenkampsweg 9
Ihmenkampsweg 10
Ihmenkampsweg 10 B
Ihmenkampsweg 11
Ihmenkampsweg 12
Ihmenkampsweg 12 B
Ihmenkampsweg 14
Ihmenkampsweg 14 B
Ihmenkampsweg 16
Ihmenkampsweg 16 B
Ihmenkampsweg 18
Ihmenkampsweg 20

今、私は、全体のリストをソートするのに役立つ必要があります。ただ、プログラム上の例のようにする必要があり、出力:


Ihmenkampsweg 1 O
Ihmenkamsweg 2-4 E
Ihmenkampsweg 5 O
Ihmenkampsweg 9-11 O
Ihmenkampsweg 12-20 E

ので、奇数、偶数、昇順で並べ替える必要があります。 streetnameとnumberを分割して奇妙であるかどうかを証明するために、私は次のようにテストできます:if(number%2!= 0 )それは偶数でないならば奇数です。

しかし、私はすべての奇妙な、まったくの、またはすべての通りを一列に並べる方法を知らない。 streetnameが以前のように同じで、number +2が配列の次の番号と等しい場合、テストするループを実行できますか? (

+1

この質問は読むのに苦労します。プログラムが期待している入力、望ましい結果、プログラムがこれまでに生成したものを列挙します。 私はあなたが何を意味しているのかわかりません_「必要な方法でリスト全体を並べ替えるのに助けが必要です」_ –

+0

私はSamuelに同意します。質問のコードを書式化してくださいあなたの問題はです。 –

+0

あなたのお問い合わせをありがとう私はちょうどコードといくつかのテキストを更新し、私は私の質問を理解して願っています。私の入力がどのように見えるか、出力がどのように表示されるべきかのいくつかの例があります。 – jooni

答えて

0

(私はあなたのコードの一部をなぜ知っているが、編集F-アップしません)

あなたがしている、私は誰かが数日間、この上で立ち往生し、いくつかの実際のコードイムで私を助けることができる願っています 助けを求めるので、私はちょうどつもりあなたにいくつかのアドバイスを与えることだ:場合でも/(あなたの街路のためのstreetnameが含まれているStreetクラス、街路番号や文字をデータ構造を作成し、それは奇妙だ場合

  • をあなたは欲しい)
  • ArrayListStreetを作成します。 dそれぞれの通りを追加します(あなたが現在行っているように印刷する代わりに)。配列ではなくArrayListを使って作業したいかもしれませんが、もっときれいです。
  • あなたのリストを注文してください(このためにArray.sort(...)Comparatorを検索してください)。あなたが既に注文されていると確信したら、気にしないでください。
  • ここで主要部分について:Loop on your Street ArrayList:変数に最初のものを保存してからループを続け、次に数字を比較します:同じ通りで同じ番号の範囲であるかどうかをテストします。テストが失敗するまで(異なるストリート/ナンバーレンジ)、ストリートの最初の番号と最後の番号を印刷します。ストリートごとにこれを繰り返します。

これをまず実行すると、オッズ/ストーリーのケースが処理されます。難しい場合は単純化し、a/b/cを考慮に入れて、streetnameとnumberを入力しないで、戻ってストリートレターでテストすることができます。その後、範囲内に1つの通りだけがあるかどうかを確認する必要があります(たとえば、テストケースにIhmenkampsweg 50 bを追加するなど)。