2

区切り文字を使用して、「105878-798 ## 176000 ## JDOE」のような31行のドキュメントの最初の数字を引き出し、int配列に入れようとしています。私が興味を持っている番号は「105878798」であり、番号の数は一貫していません。

これを書きましたが、(行の)最初の区切り文字に達したときに行を変更する方法がわかりません。

   import java.util.*;
   import java.io.*;

   public class Test {
   public static void main(String[] args) throws Exception {
            int n = 0;
            String rad;

            File fil = new File("accounts.txt");
                int[] accountNr = new int[31];
            Scanner sc = new Scanner(fil).useDelimiter("##");

                    while (sc.hasNextLine()) {
                    rad = sc.nextLine();
                    rad.replaceAll("-","");
                    accountNr[n] = Integer.parseInt(rad);
                    System.out.println(accountNr[n]);
                    n++;
                    System.out.println(rad);
                }
       }
   }
4

2 に答える 2

1

これにはスキャナーを使用せず、StringTokenizer を使用して区切り文字を ## に設定し、.nextElement() を呼び出し続けるだけで、どれだけ長くても次の番号を取得できます。

StringTokenizer st2 = new StringTokenizer(str, "##");

while (st2.hasMoreElements()) {
    log.info(st2.nextElement());
    }

(もちろん、さまざまな方法で繰り返すことができます..)

于 2013-01-24T18:22:31.737 に答える
0

行ごとに使用することをお勧めしますline.split("[#][#]")[0](もちろん、例外を扱います)。

また、rad.replaceAll(...)String は不変オブジェクトであるため、新しい String を返します。parseIntではなく、返された String に対して実行する必要がありますrad

コード内の同等の 2 行の代わりに、次の行を使用してください。

String newRad = rad.replaceAll("-","");
accountNr[n] = Integer.parseInt(newRad);
于 2013-01-24T18:24:03.630 に答える