質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.37%

  • Java

    16479questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • コマンドプロンプト

    446questions

    コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Javaでテキストファイルに書かれている数字のみを取出し、計算するコードを教えてほしいです。

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 319

yyhsxhxh

score 1

 前提・実現したいこと  

緊急でございます。
Javaのプログラムで、
支出を記録したファイル, kaikei.txtを読み込み、1日・2日・3日それぞれの支出額の合計を計算するプログラムを作りたいのですが、途中から作り方がわからなくなってしまいました。
ファイルに書かれている文章のコロン(:)以降をまず、Stringで取り出して、
そのあとintに変換して計算というコードが良いかなと思っているのですが、メゾットがわからずどうつくっていいかわからなくなってしまいました。
完成したプログラムを教えていただけますと幸いです。
Kaikei.txtのファイルの内容は以下のとおりです。
2日,雑貨品:150
1日,ごはん:320
1日,運賃:550
3日,ごはん:220
2日,運賃:610
3日,運賃:480
3日,病院:800
3日,ファッション:1200
1日,雑貨品:200

 発生している問題・エラーメッセージ

エラーメッセージ

 該当のソースコード

```ここに言語名を入力
import java.io.*;
import java.lang.*;
public class Kaikei {
public static void main(String[] args) {
public class CopyFile {  
public static void main(String[] args) {  
try {  
int i,day1,day2,day3;  
String line,;  

System.out.println  

FileReader fr = new FileReader("kaikei.txt");  
BufferedReader br = new BufferedReader(fr);  

while (br.ready()) { //特定した行の文字を取り込みたい  
line = br.readLine();  

num= line.substring(0, 0+1)  
num= line.substring(0, 0+1)  

if(line.indexOf(1)==1, )  
day1= line.substring(0, 0+1)  
day2= line.substring(7, 10+1)  

}  
br.close();  
fr.close();  

System.out.println("。");  
}  
catch (IOException e) {  
System.out.println("標準入力において例外が発生しました。");  

}  
}  
}  

 試したこと

ここに問題に対して試したことを記載してください。

 補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2018/11/08 13:02

    打ち間違いだとは思いますが、メゾットではなく、メソッドです。桜の人かな…?

    キャンセル

  • mather

    2018/11/08 13:23

    「完成したプログラムを教えていただけますと幸いです。」は丸投げの質問になってしまいます。回答にあるヒントを使ってできる限り自力で解くようにしましょう。

    キャンセル

  • 退会済みユーザー

    2018/11/08 16:05

    複数のユーザーから「意図的に内容が抹消された質問」という意見がありました
    解決後に編集機能を用いて質問内容を改変し関係のない内容にしたり、内容を削除する行為は禁止しています。
    投稿していただいた質問は、後に他の誰かが困ったときに助けになる情報資産になると考えるからです。
    「質問を編集する」ボタンから編集を行い、他のユーザにも質問内容が見えるように修正してください。

  • 退会済みユーザー

    2018/11/08 16:06

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 3

+3

ファイルに書かれている文章のコロン(:)以降をまず、Stringで取り出して、

Stringクラスのsplit()を使いましょう。

https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#split-java.lang.String-

intに変換して

IntegerクラスのparseInt()を使いましょう。

https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Integer.html#parseInt-java.lang.String-

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/08 14:15

    ご回答ありがとうございます。
    ご丁寧にリンクまでありがとうございます・・・!!
    メソッドを使ってみたのですが、以下のようにエラーが出てしまい実行することができませんでした。
    どう対処すればよいか困っております。。



    import java.io.*;
    import java.lang.*;
    public class Kadai24 {
    public static void main(String[] args) {

    try {
    int i,day1,day2,day3,num1,num2;
    String line,line1,line2;

    day1=0;
    day2=0;
    day3=0;

    FileReader fr = new FileReader("Shopping.txt");
    BufferedReader br = new BufferedReader(fr);

    while (br.ready()) { //特定した行の文字を取り込みたい
    line = br.readLine();

    line1= line.substring(0, 0+1); 
    num1= Integer.parseInt(line1);

    line2 = line.split(":", 0); //エラー個所
    num2= Integer.parseInt(line2);

    if(num1 == 1){day1=day1+num2;}{if(num1==2){day2=2+num2;}{day3=day3+num2;}}

    /*if(line.indexOf(1)==1, )
    day1= line.substring(0, 0+1) //どっかでint型に変換する必要あり 7から10行目までの文字とりだす
    day12= line.substring(7, 10+1)*/

    }
    br.close();
    fr.close();

    FileWriter fw = new FileWriter("Shopping2.txt");
    BufferedWriter bw = new BufferedWriter(fw);
    PrintWriter pw = new PrintWriter(bw);
    fr.printIn("1日目は"+day1+"円で2日目は"+day2+"円で3日目は"+day3+"円です。");//エラー個所

    pw.close();
    bw.close();
    fw.close();

    }

    catch (IOException e) {
    System.out.println("標準入力において例外が発生しました。");

    }
    }
    }

    エラーメッセージは以下のようになっております。

    H:\>javac Kadai24.java
    Kadai24.java:27: エラー: 不適合な型: String[]をStringに変換できません:
    line2 = line.split(":", 0);
    ^
    Kadai24.java:45: エラー: シンボルを見つけられません
    fr.printIn("1日目は"+day1+"円で2日目は"+day2+"円で3日目は"+day3+"円です
    。");
    ^
    シンボル: メソッド printIn(String)
    場所: タイプFileReaderの変数 fr
    エラー2個

    キャンセル

  • 2018/11/08 14:20 編集

    https://teratail.com/questions/156888
    こちらで質問されてたのでそちらに回答しました。

    同じ要件内であればその質問内で追加質問、別要件なら別に質問を立てるようにしたほうが良いです。
    あちこちに質問するのは見直しにくいですし、混乱のもとになるので非推奨です。
    ついでに言えば使い方を調べるとか、エラーを調べるとかしましょう。

    キャンセル

  • 2018/11/08 15:53

    ご指摘ありがとうございます、
    そしてご丁寧にご回答ありがとうございます、参考になりました、、!

    キャンセル

0

public static void main(final String[] args) throws Exception {
    try (Stream<String> lines = Files.lines(Paths.get("kaikei.txt"))) {
        Map<String, Integer> summary = lines.map(line -> {
            String[] split = line.split(",");
            return new String[] { split[0], split[1].split(":")[1] };
        }).collect(Collectors.groupingBy(array -> array[0], TreeMap::new, Collectors.summingInt(array -> Integer.parseInt(array[1]))));
        summary.entrySet().stream().forEach(entry -> System.out.println(entry.getKey() + ": " + entry.getValue()));
    }
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

回答はすでに出そろってる感じなので、今のコードでメソッドの使い方がおかしい点をいくつか。

while (br.ready()) {  //特定した行の文字を取り込みたい

正直、readyというメソッドを使っているところを初めて見ました。というか存在自体知りませんでした。
調べてみると確実性のある動作をしないっぽいのでお勧めできません。一般的にはこう書くかと。

while((line = br.readLine()) != null) {
num= line.substring(0, 0+1)
num= line.substring(0, 0+1)

なぜ2回書いた。セミコロンもないし、そもそもnumの宣言がどこにもない。

蛇足:root_jpさんのの別バージョン

// import static java.util.stream.Collectors.*;

public static void main(String[] args) 
    try ((Stream<String> lines = Files.lines(Paths.get("kaikei.txt"))) {
        lines.collect(
            groupingBy(s -> s.substring(0, s.indexOf(','),
                       TreeMap::new,
                       summingInt(s -> Integer.parseInt(s.substring(s.indexOf(':') + 1)))
        ).forEach((k, v) -> System.out.println(k + ":" + v));
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Java

    16479questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • コマンドプロンプト

    446questions

    コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

  • トップ
  • Javaに関する質問
  • Javaでテキストファイルに書かれている数字のみを取出し、計算するコードを教えてほしいです。