2016-09-01 11 views
0

私はいくつかのアイディアが必要です。Java:ファイルから行を解析する

AAA222BBB%の CC333DDDD%の EEEE444FF%の

「%」記号は「行の終わり」の指標のようなものです

私が読みたい:私はこのようないくつかの情報を持つファイルを持っています(4文字、3桁、4文字)に合うように解析してください - 上記のように表示された場合は、次のように特殊記号や空白を挿入する必要があります:

AAA-222BBB-% CC-333DDDD% EEEE444FF-- %

私が最初に思いついたのは、すべての行を文字列として読むことでした。そして、いくつかの巨大なif文が

For each line: 
{ 
    if (first symbol !abc...xyz) { 
     insert - 
    } 

    if (second symbol !abc...xyz) { 
     insert - 
    } 
} 

のようなものを言って、私はそこに、よりエレガントかつ効果的な方法のテキストの実際の解析に行う必要があります確信しているが、私はどのようにわかりません。誰もが良いアイデアを持っている場合ので、私の最初のアドバイスは、この他のポスト(スキャナと正規表現の素敵な説明を)読むことです

ベスト

+0

ファイルを1行ずつ読み込むには、java.util.Scanner ref:https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.htmlを使用できます。それは "nextLine()"と呼ばれるメソッドを持っています –

+1

入力には '%'が含まれていますか、それを使って行末を表示しましたか?スタックオーバーフローエディタで行を分割する方法がわからないため、2番目のケースで使用しましたか? – Pshemo

答えて

1

:-)私を啓発してください: How do I use a delimiter in Java Scanner?

そして、私の解決策(必ずそれは賢いですが、それが動作するはずです)

For each line: 
{ 
    Scanner scan = new Scanner(line); 
    scan.useDelimiter(Pattern.compile("[0-9]")); 
    String first = scan.next(); 

    scan.useDelimiter(Pattern.compile("[A-Z]")); 
    String second = scan.next(); 

    scan.useDelimiter(Pattern.compile("[0-9]")); 
    String third = scan.next(); 

    scan.close(); 

    System.out.println(addMissingNumber(first, 4) + addMissingNumber(second, 3) + addMissingNumber(third, 4)); 
} 

//For each missing char add "-" 
private static String addMissingNumber(String word, int size) { 
    while (word.length() < size) { 
     word = word.concat("-"); 
    } 
    return word; 
} 

出力: "AAA-222BBB-"

+0

私が知っているjavaには 'For each line:'はありません! –

+0

ありがとうございました! - これは非常に役に立ちました – Niklas

+0

@Am_I_Holpful "For Each Line"はJavaコードではなく、アイデアを示すためにのみ使用されていました(問題の擬似コードから取得されたものです) –

関連する問題