一个关于循环字符串的问题

问题描述

现在我有一个字符串“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)追加时间,这样你还写不了代码的话你再找我 明天去公司帮你写,冲着你给的分数来的
解决方案三:
用位运算……

时间: 2024-12-02 18:24:09

一个关于循环字符串的问题的相关文章

转换问题-如何让一个数组(字符串数组,有值)转换为将数组值用逗号隔开的字符串?

问题描述 如何让一个数组(字符串数组,有值)转换为将数组值用逗号隔开的字符串? 如下:String [] str ={"aa","bb","cc"}; ^&%*$#@!D 经过上述将其变为字符串如下: String ss="aa,bb,cc,"; 解决方案 把数组转换为一个用逗号分隔的字符串将数组.list转换为一个用逗号分隔的字符串 解决方案二: String[] str={"aa","

c语言-新手一个关于循环的问题

问题描述 新手一个关于循环的问题 先输入一个数n 来表示需要循环几次 但是如果输入了2 在第二次输入字符串的时候 结果是错误的 代码写的烂 轻喷 #include<stdio.h> #include <stdlib.h> void qiuhe(char a[1000],char b[1000]) { char a1[1000]; char b1[1000]; int A[1000]; int B[1000]; int s1=0; int s2=0; for(int i1=0;a[i

一个可以删除字符串中HTML标记的PHP函数

一个可以删除字符串中HTML标记的PHP函数作者:limote 当访客留言和发帖时,我们并不希望访客在留言和帖子中使用HTML标记,所以在访客提交留言和帖子时我门得把HTML标记删除,下面的函数就是实现此功能的函数 <? function delete_htm($scr) { for($i=0;$i<strlen($scr);$i++) { if(substr($scr,$i,1)=="<") { while(substr($scr,$i,1)!=">

游戏-nodejs的readline如何变成同步?还是采用一个异步循环?

问题描述 nodejs的readline如何变成同步?还是采用一个异步循环? 我在给一个小朋友教编程,在使用javascript/node.js 已经讲到条件语句,循环,函数.现在要做一个猜数字的游戏,但我发现readline模块只支持异步方式.这意味着我不能采取这样的逻辑. while(true){ guess=input(); // 我需要在这里block ans=checkGuess(guess); //返回-1,0,1 displayAns(ans); if(ans===0)break;

malloc-小弟谢了一个简单的字符串求最大子串的程序不知道错哪里,請大神帮忙回答下

问题描述 小弟谢了一个简单的字符串求最大子串的程序不知道错哪里,請大神帮忙回答下 程序要求如下: 一个字符串,字符连续的部分为子串(不含带数字的部分) 下面是我写的程序 #include using namespace std; char* BiggestStr(char* str) { char* pStr = (char*)malloc(sizeof(str)+1); //申请一个空间存最大子串 int nCount = 0; //用于记录最大子串的长度 int J_nCount=0; ch

c语言-求助一个java语言的一个for循环语句

问题描述 求助一个java语言的一个for循环语句 for(int i=2,j=1; j<10; i=(i==9)?(((++j)/j)+1):(i+1)){ System.out.printf("%d*%d=%2d%c",i,j,i*j, ((i==9)?'n':' ')); } 输出结果是99乘法表. 这个for循环里的++j为什么不能换成j+1啊? 谢谢各位了. 解决方案 ++j是改变变量值的 j+1是不改变变量值的 解决方案二: ++j 等效于j=j+1 你用j+1 原j

但没有用remove函数-编写了一个Java循环报数的问题,应该是哪里卡住了过不去,求大神指点

问题描述 编写了一个Java循环报数的问题,应该是哪里卡住了过不去,求大神指点 public class Jump {/*1-100号人循环报数,报到7的倍数的输出,第一轮输出714,...98第二轮99报1输出513....不管是第几轮,输出完50个数结束.*/ public static void main(String[] args) { int arr_all[] = new int[101]; int m = 1; int i = 1; int out = 0; int count =

mfc-MFC中做了一个while循环,现在发现当while执行的时候,其他的按钮都不能动

问题描述 MFC中做了一个while循环,现在发现当while执行的时候,其他的按钮都不能动 MFC中做了一个while循环,利用一个标识变量(flag=1).现在发现当while执行的时候,其他的按钮都不能动.所以也没有办法改变标识,即使按了stop的按钮,修改标识(flag=0)也没有办法退出while循环. 解决方案 死循环了,界面线程获不到cpu时间,死循环一般放在单独的线程中执行,不要和界面线程放在一起,而且死循环中执行一段后要让其sleep一下,要不然其它线程获取不到cpu时间,cp

SQL点滴3—一个简单的字符串分割函数

原文:SQL点滴3-一个简单的字符串分割函数 偶然在电脑里看到以前保存的这个函数,是将一个单独字符串切分成一组字符串,这里分隔符是英文逗号","  遇到其他情况只要稍加修改就好了 CREATE FUNCTION dbo.f_splitstr(     @str varchar(8000))RETURNS @r TABLE(id int IDENTITY(1, 1), value varchar(5000))ASBEGIN /* Function body */    DECLARE @