怎么样生成一个字母加数字的字符串?

狂想者 2010-11-17 04:42:40
我想要一个字符串:例:XM101117001,XM101117002等,其中,XM是固定字母,10是年11是月17是日,这个好办,就是001,002,003。。。。是根据每次调时要增加的,还有如果日期到了第二天,如101118时,还要从001开始,不知道这个001如何生成递增!!!请高手指点!!!
...全文
437 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangfan_1009 2010-11-23
  • 打赏
  • 举报
回复
就是个写流水号。。不过2楼的方法确实简单
banalitylife 2010-11-23
  • 打赏
  • 举报
回复
这个感觉很简单啊,lz自己想想吧。
  • 打赏
  • 举报
回复
我倒,这么简单的东西还用得着.. 进来看一下都不值得。
paullbm 2010-11-23
  • 打赏
  • 举报
回复
那就得每次插入之前查寻当天的最大值,如果无则从1开始,有则进行+1操作。
狂想者 2010-11-22
  • 打赏
  • 举报
回复
谢谢各位,我正在利用你们的思路试一下,有结果告诉大家
qybao 2010-11-17
  • 打赏
  • 举报
回复
可以考虑把编号写到一个文件,获取编号时,判断文件的修改日期,如果和当前日期一样,就取出,然后继续加1再写回文件,如果不一样,则重新设成1并写回文件
「已注销」 2010-11-17
  • 打赏
  • 举报
回复
考虑重启的话,可以考虑把状态记录到硬盘上,或者记录到另外一台主机上
blazingfire 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 sanyu626 的回复:]
我想要一个字符串:例:XM101117001,XM101117002等,其中,XM是固定字母,10是年11是月17是日,这个好办,就是001,002,003。。。。是根据每次调时要增加的,还有如果日期到了第二天,如101118时,还要从001开始,不知道这个001如何生成递增!!!请高手指点!!!
[/Quote]
最好要引入数据库机制,把用到的日期和产生的最大编号都存起来, 用sql语句去取,取出编号,要把编号用到的信息日期和产生的最大编再存到数据库
  • 打赏
  • 举报
回复
严格的递增很难做到,只能做尽量是递增,因为服务可能会重启。
random0406 2010-11-17
  • 打赏
  • 举报
回复
...我只是把所有的都打印出来了,没考虑到每天都改变一次的问题,犯错了...
random0406 2010-11-17
  • 打赏
  • 举报
回复

public class Test {
String str="XM";
public static void main(String[] args) {

SimpleDateFormat sdf=new SimpleDateFormat("yyMMdd");
Date now=new Date();
StringBuffer last=new StringBuffer();
last.append("XM").append(sdf.format(now)).append("000");

for (int i = 0; i <30; i++) {
int a=0;
++a;
String aa="";
if((aa+a).length()==1){
System.out.println(last.replace(10, 11, (aa+a)));

}else if((aa+a).length()==2){
System.out.println(last.replace(9, 11, (aa+a)));
}
}
}


不知道这样可不可以,各位大牛给看看
keeya0416 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 sanyu626 的回复:]
我想要一个字符串:例:XM101117001,XM101117002等,其中,XM是固定字母,10是年11是月17是日,这个好办,就是001,002,003。。。。是根据每次调时要增加的,还有如果日期到了第二天,如101118时,还要从001开始,不知道这个001如何生成递增!!!请高手指点!!!
[/Quote]
如果某一天的计数超过了3位该怎么办呢? 如 999 都用完了后怎么算?
如果不考虑这个的话可不可以这么做
写一个单例,只有一个方法就是获得数字
Single{
private int temp = 0;
public int getID(int num){
if(num * 1000 > temp){
temp = num * 1000 + 1;
}else{
temp++;
}
return temp;

}
参数就传如 101117 这样的时间转换过来的一个数字
lcq331880334 2010-11-17
  • 打赏
  • 举报
回复
2楼正解 效率高
kebin0001 2010-11-17
  • 打赏
  • 举报
回复
你需要兩個程序,一個是檢查日期然後將序列歸零,一個是持續加一。
先定義一個全域變數,包含上次使用日期和序列現在值。
然後,你可以每次加一時檢查現在日期。如果時間不是上次使用日期,
表示時間過一天,則將上次使用日期更換為現在日期,同時接序列歸零。
如果日期還是相同,則只是序列加一。

檢查日期的動作可以用排程。
caofaping 2010-11-17
  • 打赏
  • 举报
回复

private static Date date = null;
private static int count = 0;

public static void main(String[] args) {
Date d = new Date();
for (int i = 0; i < 10; i++) {
if (i == 4) {
d = new Date();
}
get(d);
}
}

private static void get(Date d) {
if (date == null) {
date = d;
} else {
if (date != d) {
count = 0;
date = d;
}
}
System.out.println(count++);
}
gukuitian 2010-11-17
  • 打赏
  • 举报
回复
select max(subStr(code,9,3)) from table where code like 'XM (日期串)%'
有结果 的时候转整+1 再 补 0
没结果 设为001
Guo110 2010-11-17
  • 打赏
  • 举报
回复
做等高手,帮我去解决问题。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧