2009-05-18 25 views
0

私のfile.txtから入力(文字、数字)を読み込む方法は無限に読み込まれますが、特殊記号が出現すると停止するだけですか?数字がJavaのファイルから数値を読み取るにはどうすればよいですか?

123,345,abc 

が、それはASCIIコードを変換し、123 + 345 = 468

EDITED QUESTIONその結果2つの値を追加する必要がある。すなわち、同時に

は、ここに私のコードです;私は実際に私のfile.txtのそれらのバイトを読むことに問題があった。私はIsimilarlyが私はfile.txtにこれを追加しましたところ、その値を変換したい

public class .... { 

    static char tmp = 0; 

    public static void main(String[] args) { 
     try { 
      Reader myReader = new FileReader("MyFolder/myFile2.txt"); 

      List<Character> myList = new ArrayList<Character>(); 

      /*for(int myData = myInputStream.read(); 
        myData != -1; 
        myData = myInputStream.read()){ 
       System.out.print(" " + (char)myData); 
      }*/ 

      for(int myData = myReader.read(); 
       myData != -1; 
       myData = myReader.read()){ 
       if((char)myData != ','){ 
        myList.add((char)myData); 
       } 
       else{ 
        continue; 
       } 
      } 
      for(Character i: myList) 
      { 
       tmp = 1; 
      } 
      String myString = String.valueOf(tmp); 
      int num1 = Integer.parseInt(myString); 
      int num2 = Integer.parseInt(myString); 
      int equal = num1 + num2; 

      System.out.print(equal); 

      myReader.close(); 
     } 
     catch(FileNotFoundException e){ 

     } 
     catch(IOException e){ 

     } 
    } 
} 
+0

質問が分かりません。まさにあなたは何をしようとしていますか、あなたはすでに何を持っていますか? –

+0

すべてのコードは(まあ、しようとします - 実際にはそうしないという問題もあります)、すべてのchar値をコンマ以外の巨大な数値に加えます。それはあなたが欲しいものですか? – Yishai

+0

おそらく、擬似コードを使って達成しようとしていることを書くことができます。あなたが学んでいるときは、問題の説明からコードに直接渡すことは特に難しいことです。擬似コードを使用すると、最終的には自動化になります。 http://bit.ly/THxBe – OscarRyz

答えて

2

ここで私はあなたがすでに持っているもののオフに構築する、を求めていると思うものを行うための基本的なコードです。

public class .... { 

    private static final Pattern COMMA = Pattern.compile(","); 

    public static void main(String[] args) { 
     try { 
      BufferedReader myReader = 
        new BufferedReader(new FileReader("MyFolder/myFile2.txt")); 

      List<Integer> myList = new ArrayList<Integer>(); 
      int total = 0; 
      String line; 
      while ((line = myReader.readLine()) != null) { 
       for (String token : COMMA.split(line)) { 
        try { 
         total += Integer.parseInt(token); 
        } catch (NumberFormatException ex) { 
         System.err.println(token + " is not a number"); 
        } 
       } 
      } 

      System.out.print(total); 

      myReader.close(); 
     } catch(FileNotFoundException e){ 

     } catch(IOException e){ 

     } 
    } 
} 

それはすべてmain()ではありませんので、これを再構築した方が良いだろうと注意し、例外処理は非常に良いではありませんが、私はちょうどここに基本のために行きますよ。

+0

mmyersは、各反復を実行するCOMMA.split(行)ですか、それともJVMは一度だけスマートですか? –

+1

これは一度だけ実行され、イテレータが結果に作成されます。イテレータは、拡張されたforループを実装するためにシーンの裏で使用されるものです。 http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.14.2を参照してください。 –

-2

あなたはApache IOプロジェクトをチェックアウトすることができます。これは、Javaファイル操作を大幅に簡素化します。

あなたの場所にこのライブラリを持っていたら、あなたが使用できる非数字を無視して、最終のラインで一緒にすべての数字を追加します

int finalnumber = 0; 
LineIterator it = FileUtils.lineIterator(file, null); 
while (it.hasNext()) { 
    List<String> segments = Arrays.asList(it.nextLine().split(",")); 
    for (String segment : segments) { 
     try { 
      finalnumber += Integer.parseInt(segment); 
     } catch (NumberFormatException nfe) { 
      //not a number, ignore 
     } 
    } 
} 
LineIterator.closeQuietly(it); 
System.out.println(finalnumber); 

誰かがApache IOでこれを行う方法を指定したい場合、投稿できます。私はちょうど標準のJava IOが非常に扱いにくいので、それを完全に避けることができます。

ここで他のコードと比較すると、これははるかに簡単には見えませんが、Apache IOは多くの例外処理と裏口をしています(これはオープンソースであるためです)。これが欲しいのであれば、標準のJava IOでうまくいくはずですが、Java IOでさらに進めたいのであれば、まだ推奨しています。

+1

彼の質問は、せいぜいあいまいです。彼のプロジェクトにIO bloatwareを追加することを提案するのは避けておくことが望ましいでしょう。このbloatwareが問題を解決するかどうかを確かめることができます。 – PaulJWilliams

+0

Apache IO bloatwareからかなり離れています。私はその実装が初心者の方が親しみやすく、混乱している標準Java IOパッケージだと思います。 –

+0

彼は彼のコードとそれが存在しない問題を解決するためにそれを統合するなら、それはかなりbloatware、IMOの定義です。 – PaulJWilliams

0

あなたはあまりにも懸命に仕事をしている、とあなたは物事は、彼らが実際よりも方法がより複雑に思える作っているファイルトラバーサル、とあなたの解析ロジックを混合している:ファイルの行-traverse

BufferedReader r = new BufferedReader(new FileReader(myFile)); 
String line; 
    while ((line=r.readLine())!=null) 
{ 
    parseLine(line) 
    } 

-期待する形式にファイルの行を解析します。フォームが間違っていると失敗します。

private void parseLine(String line) 
{ 
    try{ 
    String[] values = line.split(","); 
    //do something useful assuming the line is properly formed 
    } 
    catch(Exception e) 
    { 
     //how do you want to handle badly formed lines? 
} 
+0

スティーブ、私は間違っている場合私を修正しますが、あなたの正規表現が悪い場合を除き、String split()が例外をスローするとは思わない。 http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split(java.lang.String) –

+0

2番目のコードブロックを編集して、中かっこを追加することはできますかキャッチ? – mmorrisson

関連する問題