ストリートネームと数字のデータベースを入力する必要があります。 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が配列の次の番号と等しい場合、テストするループを実行できますか? (
この質問は読むのに苦労します。プログラムが期待している入力、望ましい結果、プログラムがこれまでに生成したものを列挙します。 私はあなたが何を意味しているのかわかりません_「必要な方法でリスト全体を並べ替えるのに助けが必要です」_ –
私はSamuelに同意します。質問のコードを書式化してくださいあなたの問題はです。 –
あなたのお問い合わせをありがとう私はちょうどコードといくつかのテキストを更新し、私は私の質問を理解して願っています。私の入力がどのように見えるか、出力がどのように表示されるべきかのいくつかの例があります。 – jooni