>我有字符串遵循格式:
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仅获取用作分隔符的日期/时间之间的日期和时间之间的日期和时间。
如何和时间约会在一起?
最好在 String
中使用 split()
方法,出于所有实际目的,StringTokenizer
已被弃用,它仍然仅用于向后兼容。
尝试这样的事情:
String[] data = inputLine.split("\s+");
现在,结果数组中的每个位置都将保存一段数据,您可以继续将其转换为适当的数据类型。特别是,对于日期(由实际日期加上时间组成),执行以下操作:
Date date = df.parse(data[0] + " " + data[1]);
上述优点是,您可以忘记在分词器中获取下一个令牌,并且从一开始就知道读取了多少元素(数组的长度)。
使用:
Date date = df.parse( st.nextToken() + " " + st.nextToken() );
将两个"单词"传递给 SimpleDateFormat 对象。
使用一个参数构造函数(要标记化的字符串)创建一个StringTokenizer
。此构造函数假定任何空格都是不同标记之间的分隔符。日期表示形式中间有空格。因此,StringTokenizer
砍掉一半的日期,为第二个令牌留下另一个日期。
由于您稍后确实使用空格来分隔其他字段,因此简单的解决方案是简单地读取两个标记并重建组合字段:
Date date = df.parse( st.nextToken()+" "+ st.nextToken());