【问题标题】:StringTokenizer for split space用于分割空间的 StringTokenizer
【发布时间】:2012-11-15 15:31:03
【问题描述】:

我的字符串遵循格式:

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 方法仅获取用作分隔符的日期/时间之间的日期和空格。
如何让日期与时间在一起?

【问题讨论】:

    标签: java android jfreechart simpledateformat stringtokenizer


    【解决方案1】:

    最好在String 中使用split() 方法,出于所有实际目的,StringTokenizerdeprecated,它仍然存在只是为了向后兼容。

    试试这样的:

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

    现在结果数组中的每个位置都将保存一段数据,您可以继续将其转换为适当的数据类型。特别是,对于日期(由实际日期和时间组成),请执行以下操作:

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

    上述的好处是您可以忘记在分词器中获取下一个令牌,并且从一开始您就会知道读取了多少元素(数组的长度)。

    【讨论】:

    • ...如果日期/时间可以出现在任何地方,则可能使用更复杂的正则表达式。 (\d{4}\.\d{2}\.\d{2}\s+\d{2}:\d{2}:\d{2}|\d+\.\d+)\s+
    • 感谢您的建议。我可以更改以下代码吗? double open = Double.parseDouble( data[3] ); double high = Double.parseDouble( data[4] ); double low = Double.parseDouble( data[5] ); double close = Double.parseDouble( data[6] );
    • 我相信open 变量将位于data[2] 的位置。除此之外,是的,你可以做到。
    • 哦,肯定data[2] :) 将使用 split(),这是一个优雅的解决方案。
    【解决方案2】:

    用途:

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

    将两个“单词”传递给 SimpleDateFormat 对象。

    【讨论】:

    • 我必须对 'SimpleDateFormat("yyyy.MM.dd HH:mm:ss")' 进行任何更改?
    【解决方案3】:

    您使用一个参数构造函数(要标记的字符串)创建一个StringTokenizer。此构造函数假定任何空格都是不同标记之间的分隔符。您的日期表示在中间有空格。因此StringTokenizer 删除了一半的日期,留下另一个作为第二个标记。

    当您稍后使用空格分隔其他字段时,直接的解决方案是读取两个标记并重建组合字段:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 1970-01-01
      相关资源
      最近更新 更多