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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

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

Q&A

解決済

2回答

4344閲覧

テキストファイルから読み込んだデータを特定の文字だけ抜き出して、表示する処理

KINGFROG

総合スコア27

Java

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

0グッド

0クリップ

投稿2017/03/01 12:35

自分なりに処理の流れをコメントで記入してみました。
その中で、campany = new Campany();の処理をする事で、新しくインスタンスを作成し、一度中身のデータをリセットしているという認識で間違いないでしょうか?
どなたかご教示頂ければと思います。

package kadai;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class Strerm {

public static final String TEISU = "会社名"; public static final String TEISU2 = "代表取締役"; public static final String TEISU3 = "設立日"; public static void main(String[] args) { ArrayList<Campany> name = new ArrayList<Campany>(); Campany campany = new Campany(); try { String pass = "/Users/chris/Downloads/facebook.txt"; File file = new File(pass); BufferedReader br = new BufferedReader(new FileReader(file)); String str; while ((str = br.readLine()) != null) { // 文字列を検索して、変数に格納する int comp = str.indexOf(TEISU); int boss = str.indexOf(TEISU2); int data = str.indexOf(TEISU3); int capi = str.indexOf("資本金"); // 戻り値が-1の場合は対象の値が取得出来ていない為、処理を続けずに頭に戻る if (boss == -1) continue; // String kai = "会社名"; // 定数の長さを変数に格納する int comp1 = TEISU.length(); // String dai = "代表取締役"; // 定数の長さを変数に格納する int boss1 = TEISU2.length(); // String setu = "設立日"; // 定数の長さを変数に格納する int data1 = TEISU3.length(); // 文字列を切り出しする為、変数に格納した値を利用して、対象の文字列が取得できる範囲を引数に入れ、値をsetに代入している campany.setKaisya(str.substring(comp + comp1, data));// 会社名が見つかる位置から、会社名(3文字)を足した位置 campany.setName(str.substring(boss + boss1, comp)); campany.setSeturitu(str.substring(data + data1, capi)); // campanyインスタンスから取得した値をリストに詰め込んでいる name.add(campany); // 新しいインスタンを作成して、初期化する **campany = new Campany();** } for (Campany ca : name) { ca.showProfile(); System.out.println(); } br.close(); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("コマンドライン引数が設定されていません"); } catch (FileNotFoundException e) { System.out.println("ファイルが見つかりません!!"); } catch (IllegalArgumentException e) { System.out.println("年月日の値が不正です"); } catch (IOException e) { System.out.println(e); } }

}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

「会社のデータを書いたカードを作りファイリングする」というイメージで見てみてください。
まずデータを作るカードを用意し、データを書き込みます。書き込み終わったらファイルに入れ、次の会社のデータを書き込むための新しいカードを用意します。
この太字部分が問題のコードの動作に相当します。「中身を初期化」しているわけではなく、前のものはリストに入れて用済みなので、新しい空っぽのインスタンスを用意したというだけの話です。

投稿2017/03/02 00:23

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KINGFROG

2017/03/05 09:02

ご丁寧にありがとうございます。 確かに言われた通りに想像すると、納得がいきました。
guest

0

厳密には
中身のデータをリセットしている
のではなく、
中身の入ったインスタンスではなく新しいインスタンスを作って代入する事で
元の、データの入ったインスタンスを放置し、ガーベジコレクタに回収されうる状態にする
ということだと思います
インスタンスがデータを入れる袋だとすると
これまで入れたデータの入った袋をゴミ捨て場に出して回収待ちにしておいて
新しい袋を買ってそれにデータを入れてゆき使う
といった感じだと思います
袋を再利用する(中身のデータをリセット)のではないように思います

投稿2017/03/01 13:09

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KINGFROG

2017/03/05 09:02

ご丁寧にありがとうございます。 わかりやすく、勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問