问题描述
现在我有一个字符串“0001111111100111100011100011”,其中0代表非交易日,1代表交易日,这个字符串长度为31,第一个数学0代表是2014-1-1不是交易日。我需要返回所有的交易日期区间。比如我这里的第一个日期区间为2014-1-4到2014-1-11。求高手解决方案啊。。最好效率高一点啊。 问题补充:上面我写的是一月份代表的字符串,如果二月份的的字符串为"110001111000000"(假设这里有29位),那么我的交易区间也是要跨月份的,例如这里的2014-1-30到2014-2-2。最好有代码可以参考。基础知识比较差。
解决方案
public static void main(String[] args) {String date = "2014-01-01";String input = "0001111111100111100011100011001";int n = 0;for (int i = 0; i < input.length(); i++) {if (input.charAt(i) == '1') {n++;} else {if (n > 0) {System.out.println("from: " + addDay(date, i - n) + " to: " + addDay(date, i - 1));}n = 0;continue;}if (i == input.length() - 1) {if (n > 0) {System.out.println("from: " + addDay(date, i - n + 1) + " to: " + addDay(date, i));}}}}private static String addDay(String input, int d) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar c = Calendar.getInstance();try {c.setTime(sdf.parse(input));c.add(Calendar.DAY_OF_MONTH, d);return sdf.format(c.getTime());} catch (Exception e) {// ignore}return null;}以一月为例,随意写了写,没封装成方法,反正就这么个思路,你看着改吧.
解决方案二:
我这边没编辑器,只能说思路了,把要计算的所有月的数据拼接起来,然后indexOf获取你要的各个区间索引值,比如第一个索引区间字是3和10,用calendar实例出你需要的开始时间(如 2014年1月1日),然后开始时间加3就是第一个区间的开始时间了,开始时间加10就是结束时间,以此类推...主要用到的是calendar的set和add方法 set(2014,1,1,0,0,0)初始时间 add(Calendar.DATE,3)追加时间,这样你还写不了代码的话你再找我 明天去公司帮你写,冲着你给的分数来的
解决方案三:
用位运算……