0

テキスト ファイルに 7 行のデータがあります (以下を参照)。

name: abcd
temp: 623.2
vel: 8

name: xyz
temp: 432
vel: 7.6

正規表現を使用して、このデータを読み取ることができ、印刷することができました。ここで、このデータを変数に格納する必要があります。このデータを配列/マトリックスに格納することに傾いています。物理的には、次のようになります。

  data = [abcd, 623.2, 8 
          xyz, 432, 7.6]

したがって、実質的には、1 行目には最初の 3 行が含まれ、2 行目には 5 ~ 7 行が含まれます。ストレージにこのタイプの変数を選択する理由は、長期的には、データの呼び出しがより簡単になるためです。

   data[0][0] = abcd
   data[1][1] = 432 

math.nist.gov の Java マトリックス ファイルを使用できません。なぜなら、私はルート ユーザーではなく、IT 部門に自分のマシンに何かをインストールしてもらうのは、時間の大きな無駄であることがわかっているからです。だから私は私が持っているリソースを使いたいと思っています.EclipseとJavaインストールバージョン1.6です。

このデータを取得して、Java 配列変数に格納したいと考えています。私が知りたかったのは、配列変数の選択は正しい方法ですか? または、ベクトル変数を使用する必要がありますか (また、私の意見では、ベクトル変数を使用すると複雑になります)? または、データを簡単に保存して簡単に呼び出すことができる他の変数はありますか?

ところで、私のJavaインストールに関するもう少し詳細-何らかの形で役立つ場合:

OpenJDK ランタイム環境 (ビルド 1.6.0-b09) OpenJDK 64 ビット サーバー VM (ビルド 1.6.0-b09、混合モード)

ご協力ありがとうございました

4

5 に答える 5

9

それは私には思われる

name: abcd
temp: 623.2
vel: 8

ある種のオブジェクトであり、これらのリストを保存することをお勧めします。たとえば、オブジェクトを定義します

public class MyObject {
   private String name;
   private double temp;
   private double vel;

   // etc...
}

(おそらく - もっと適切なタイプがあるかもしれません)、これらをリストに保存します:

List<MyObject>

name 属性を介してそれらにインデックスを付ける必要がある場合は、キーがオブジェクトの名前であるマップ(例: ) を格納します。Map<String, MyObject>

obj.getName()これらのオブジェクトを作成することをお勧めします。なぜなら、配列のインデックス オフセットを覚えたり計算したりするよりも、簡単に求めることができるからです。今後、これらのオブジェクトに動作を追加できるようになります (たとえば、tempフィールドがあり、摂氏/ケルビン/華氏などで取得できるオブジェクトを使用します)。生データを配列に格納しても、オブジェクト指向言語の機能を実際に活用することはできません。

(インストールの問題に注意してください。これらのクラスは Java JRE/JDK にネイティブであり、インストールは必要ありません。Java の多くのプログラムの基本です)

于 2012-06-27T16:24:32.643 に答える
3

配列を使用できますが、2 次元配列を使用するのではなく、要素を保持するデータ クラスを作成し、それらの要素の配列を作成します。

例えば:

public class MyData {
  String name;
  float temp;
  int vel;
}

次に、定義できます

 MyData arr[];  

並べ替え/検索タイプの基準があるかどうかに応じて、Array の代わりに List() を使用することもできます。このアプローチにより、要素を追加したり、重複を見つけたり検索したりする場合に、より多くの柔軟性が得られます。

于 2012-06-27T16:25:32.890 に答える
0

読み取っているキーと値のペアのすべてのキーが一意であると仮定すると、アイテムを に格納しないのはなぜjava.util.Mapですか?

Pattern pattern = Pattern.compile("(\\w+): (\\w+)");
try(BufferedReader reader = new BufferedReader(new FileReader("data.txt"))){

    Map<String, String> items = new LinkedHashMap<>();

    String line = null;
    while( (line = reader.readLine()) != null) {
        Matcher matcher = pattern.matcher(line);
        while(matcher.find()){
            items.put(matcher.group(1), matcher.group(2));
        }
    }

    System.out.println(items);

}catch(IOException e) {
    System.out.println(e.getMessage());
}

マップには次のものが含まれます。{name=xyz, temp=432, vel=7}

そして、次のような特定の要素を簡単に読み取ることができます。items.get("name")

于 2012-06-27T16:36:45.190 に答える
0

この情報をラップする

name: xyz
temp: 432
vel: 7.6

独自のクラスで。

List<T>そして、好みの a の実装を使用してください。

于 2012-06-27T16:25:42.253 に答える
0

Java Collection Frameworkに頼ることができると思います。

  1. データに特定のシーケンスがある場合は、Arrays の代わりに ArrayListを使用できます。
  2. さらに、キーと値のペアでデータを保存する場合は、 Mapを使用します。

注: 並べ替えられた値が必要な場合は、 Comparator または Comparable Interface で ArrayList を使用します。Mapを使用していて、一意の並べ替えられた値が必要な場合は、TreeMap を使用します

于 2012-06-27T16:30:00.197 に答える