2

文字列には次の形式があります。

2012.11.15 22:00:00 1.2971 1.2974 1.2959 1.296

私は次のコードを使用します:

DateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
                String inputLine;
                in.readLine();
                while ((inputLine = in.readLine()) != null) {
                    StringTokenizer st = new StringTokenizer(inputLine);
                    Date date       = df.parse( st.nextToken() );
                    double open     = Double.parseDouble( st.nextToken() );
                    double high     = Double.parseDouble( st.nextToken() );
                    double low      = Double.parseDouble( st.nextToken() );
                    double close    = Double.parseDouble( st.nextToken() );
              ...

ただし、メソッド SimpleDateFormate は、日付と、セパレータとして使用される日付/時刻間のスペースのみを取得します。
日付と時刻を一緒に取得するにはどうすればよいですか?

4

3 に答える 3

3

split()のメソッドを使用することをお勧めしますString。すべての実用的な目的StringTokenizer推奨されておらず、下位互換性のためだけに残っています。

次のようなことを試してください:

String[] data = inputLine.split("\\s+");

これで、結果の配列の各位置にデータが保持されるようになり、それを適切なデータ型に変換できます。特に、日付 (実際の日付と時刻で構成されます) については、次のようにします。

Date date = df.parse(data[0] + " " + data[1]);

上記の利点は、トークナイザーで次のトークンを取得することを忘れることができ、最初から読み取られた要素の数 (配列の長さ) を知ることができることです。

于 2012-11-15T15:32:43.717 に答える
2

使用する:

Date date       = df.parse( st.nextToken() + " " + st.nextToken() );

両方の「単語」を SimpleDateFormat オブジェクトに渡します。

于 2012-11-15T15:32:59.643 に答える
1

StringTokenizer1つのパラメーターコンストラクター(トークン化する文字列)を使用してを作成します。このコンストラクターは、空白が個別のトークン間の区切り文字であることを前提としています。日付表現の中央にスペースがあります。したがってStringTokenizer、日付の半分を切り取り、2番目のトークン用に別の日付を残します。

後でスペースを使用して他のフィールドを区切るので、簡単な解決策は、両方のトークンを読み取り、結合されたフィールドを再構築することです。

 Date date = df.parse( st.nextToken()+" "+ st.nextToken());
于 2012-11-15T15:37:38.603 に答える