0

プロジェクトで Scanner を使用しているときに問題が発生しました。次のような文字列を含むファイルがあります。

  • 名前=ジョン
  • カウント = 100
  • 1ip = 127.0.0.7
  • 終了 = ファイル

配列に追加するこのすべての文字列と、この配列は 2 つの ArrayList に追加されます。数字で始まる行の魔女は必要ありません。「1ip」のように。だから私はそれをスキップしようとします。

そして、それは私の方法のコードです:

    public void scan_file() throws IOException{
      Scanner sc = null;         
      String [] array_string;
      String not_sring;

      try{  
              File out = new File("file.txt");          
          sc = new Scanner(out);
          while(sc.hasNextLine()){
          not_sring=sc.nextLine();
           if(not_sring.charAt(0)>='0' && not_sring.charAt(0)<='9'){
                array_string = sc.nextLine().split("=");
            }
           else{
               array_string=sc.nextLine().split("=");
               for (int i=0; i<array_string.length; i++)
                for(int j=1; j<array_string.length; j++){
                           list_id.add(array_string[i]);
                           list_value.add(array_string[j]);     
                     }
               }
        }
      }

         catch(FileNotFoundException e) {
                 //e.printStackTrace(System.out);
                 System.out.println("File not found");
                 scan_file();
         } 
        sc.close();}

そして、それはすべて機能していません。誰かが私の英語と私の仕事を理解してくれたら.

4

3 に答える 3

1

nextLine()あなたは確かにあなたの問題の1つであるループで2回呼び出します。

于 2013-04-15T11:39:33.333 に答える
0

行をスキップしたい場合は、次のループ反復に進みます:

 if(not_sring.charAt(0)>='0' && not_sring.charAt(0)<='9'){
     continue; // This will skip to the next while iteration begining with the conditional check
 }

そして、あなたのフォーマットがid=valueuse よりも

    array_string=not_sring.split("="); // No need to use nextLine again as it will overwrite the current line read into not_sring
    list_id.add(array_string[0]); 
    list_value.add(array_string[1]);

これは、ファイル形式が説明どおりに正しいことを前提としています。elseそして、それらのブロックの間にもう必要はありません。

于 2013-04-15T11:41:30.937 に答える
0
try{  
          File out = new File("file.txt");          
          sc = new Scanner(out);
          while(sc.hasNextLine()){
              not_sring=sc.nextLine();
              if(!Character.isDigit(not_sring.charAt(0))){
                array_string = not_sring.split("=");
                list_id.add(array_string[0]);
                list_value.add(array_string[1]);
              }
          }

}

これをチェックしてください。for ループは必要ありません。必要な場合は、ブロックするか、文字列を破棄します。

于 2013-04-15T11:56:22.860 に答える