在java中实现4位自动编号,当超过9999时的编号时

你们都是坏人 2016-01-06 09:21:28
原来的程式用 编号0000-9999这种方式自动生成,
现在 发现 有些资料快要超过 9999了,
在不修改栏位长度的情况下。
考虑 当 超过 9999编号时:
从A001开始编号, 到 A999
后 从 B001编号……。

如何用最简洁的代码 实现这种编号。
...全文
1517 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ITjavaman 2016-01-07
  • 打赏
  • 举报
回复
public static void main(String[] args)
	{
		for(int i = 0;i<=38683;i++){//38683
			System.out.println(i+": "+f(i));
		}
		
	}
	private static String f(int num){
		String demo = "ABCDEFGHIJKLMNOPQRSTYVWSYZ";
		String result = "";
		int count =0;
		DecimalFormat df=new DecimalFormat("0000");//位数不足补0
		if(num<=9999){
			 return df.format(num);
		}
		df=new DecimalFormat("000");
		if(num<=35973){
			num=num-9999;
			while(num!=999&&num/999>0){
				num=num-999;
				count++;
			}
			return demo.substring(count,count+1)+df.format(num);
		}
		count=0;
		df=new DecimalFormat("00");
		if(num<=38449){
			num=num-35973;
			while(num!=99&&num/99>0){
				num=num-99;
				count++;
			}
			return "Z"+demo.substring(count,count+1)+df.format(num);
		}
		count=0;
		if(num<=38683){
			num=num-38449;
			while(num!=9&&num/9>0){
				num=num-9;
				count++;
			}
			return "ZZ"+demo.substring(count,count+1)+num;
		}
		return "超过范围!!!";
	}
不知是否符合你的要求
豫让_______ 2016-01-06
  • 打赏
  • 举报
回复
引用 8 楼 laogao598599 的回复:
[quote=引用 7 楼 a291263379 的回复:] 如果只到Z999的话那最多也只能增加25974的空间。如果能到ZZZZ的话会大得多。辣么问题就转化为简单的进制转换问题,10进制转为35进制。

public static void main(String[] args) 
		String[] temp = new String[]{
		"0",
		"0",
		"0",
		"0"
		};
		Integer j = 0;
		int m = 1500624;//这里m是你的十进制值编号,最后得到的就是转换后的35进制编号。下标最大值35^4-1(zzzz),
                                              //加上0000能记录1500625个数字哟
		while (m > 0) {
			int n = (m % 35);
			if (n > 9) {
				temp[3 - j] =  ((char) ('A' + n - 9))+"";
			} else {
				temp[3 - j] =  n+"";
			}
			j++;
			m = m / 35;
		}
		for (int i = 0; i < temp.length; i++) {
			System.out.println(temp[i]);
		}
		
	}

为啥不是36进制呢[/quote]是我表述错了嘛。。。其实就是36进制。
laogao598599 2016-01-06
  • 打赏
  • 举报
回复
引用 7 楼 a291263379 的回复:
如果只到Z999的话那最多也只能增加25974的空间。如果能到ZZZZ的话会大得多。辣么问题就转化为简单的进制转换问题,10进制转为35进制。

public static void main(String[] args) 
		String[] temp = new String[]{
		"0",
		"0",
		"0",
		"0"
		};
		Integer j = 0;
		int m = 1500624;//这里m是你的十进制值编号,最后得到的就是转换后的35进制编号。下标最大值35^4-1(zzzz),
                                              //加上0000能记录1500625个数字哟
		while (m > 0) {
			int n = (m % 35);
			if (n > 9) {
				temp[3 - j] =  ((char) ('A' + n - 9))+"";
			} else {
				temp[3 - j] =  n+"";
			}
			j++;
			m = m / 35;
		}
		for (int i = 0; i < temp.length; i++) {
			System.out.println(temp[i]);
		}
		
	}

为啥不是36进制呢
豫让_______ 2016-01-06
  • 打赏
  • 举报
回复
如果只到Z999的话那最多也只能增加25974的空间。如果能到ZZZZ的话会大得多。辣么问题就转化为简单的进制转换问题,10进制转为35进制。

public static void main(String[] args) 
		String[] temp = new String[]{
		"0",
		"0",
		"0",
		"0"
		};
		Integer j = 0;
		int m = 1500624;//这里m是你的十进制值编号,最后得到的就是转换后的35进制编号。下标最大值35^4-1(zzzz),
                                              //加上0000能记录1500625个数字哟
		while (m > 0) {
			int n = (m % 35);
			if (n > 9) {
				temp[3 - j] =  ((char) ('A' + n - 9))+"";
			} else {
				temp[3 - j] =  n+"";
			}
			j++;
			m = m / 35;
		}
		for (int i = 0; i < temp.length; i++) {
			System.out.println(temp[i]);
		}
		
	}

你们都是坏人 2016-01-06
  • 打赏
  • 举报
回复
引用 2 楼 ZTzhubajie 的回复:
我能想到的,用ascII码,当后三位要产生进位时,第一位+1
长度控制4位,第一位是9的情况下,进位 +1 就超出了。
你们都是坏人 2016-01-06
  • 打赏
  • 举报
回复
引用 1 楼 trocp 的回复:
[quote=引用 楼主 xinhao_ 的回复:] 原来的程式用 编号0000-9999这种方式自动生成, 现在 发现 有些资料快要超过 9999了, 在不修改栏位长度的情况下。 考虑 当 超过 9999编号时: 从A001开始编号, 到 A999 后 从 B001编号……。 如何用最简洁的代码 实现这种编号。
你这个需求不完善。如果到达Z999呢,又怎么处理? 有没可能有ZZZZ呢[/quote] 达到 Z999 后,从 ZA001开始编, 从 项目的资料面来说,不可能达到 ZZZZ 但从 代码方面考虑,是 能到ZZZZ的!
你们都是坏人 2016-01-06
  • 打赏
  • 举报
回复
引用 3 楼 ligyu110 的回复:
使用十六进制编号,用的时候再转成十进制的
超过 9999的用十六进制编号不行,(会出现重复数字)
老李家的小二 2016-01-06
  • 打赏
  • 举报
回复
使用十六进制编号,用的时候再转成十进制的
ZTzhubajie 2016-01-06
  • 打赏
  • 举报
回复
我能想到的,用ascII码,当后三位要产生进位时,第一位+1
oO临时工Oo 2016-01-06
  • 打赏
  • 举报
回复
引用 楼主 xinhao_ 的回复:
原来的程式用 编号0000-9999这种方式自动生成, 现在 发现 有些资料快要超过 9999了, 在不修改栏位长度的情况下。 考虑 当 超过 9999编号时: 从A001开始编号, 到 A999 后 从 B001编号……。 如何用最简洁的代码 实现这种编号。
你这个需求不完善。如果到达Z999呢,又怎么处理? 有没可能有ZZZZ呢
lidongfa 2016-01-06
  • 打赏
  • 举报
回复
把数值用36进制转换成字符串就实现你要的功能了。
洛鸣生 2016-01-06
  • 打赏
  • 举报
回复
不是用存储过程么

81,111

社区成员

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

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