用java实现字母与数字混合的唯一序号,且要递增

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java实现字母与数字混合的唯一序号,且要递增相关的知识,希望对你有一定的参考价值。

需求是一个3位字符长度的唯一序号,需要满足字母数字混合一起从最小值递增至最大值。

规则如:
先从001-999,当纯数字达到最大值999时,第一位就要用A字母开头,就是A01-A99的一个递增,
当以字母A开头的值到最大值时,第二位也要用A开始,也就是AA1-AA9的一个递增,
当以字母AA开头的值到最大值时,第三位也要从A开始,即为AAA-AAZ的一个递增,
即从最后一位,先按数字递增到最大值时9,再按字母递增到最大值Z,在依次类推得到第二位,第三位。
最终满足最小值为001-最大值为ZZZ的一个唯一序列号。
望高手指点!

import java.util.LinkedList;

public class ReplaceNumber

public static void main ( String[] args )

LinkedList<String> result = new LinkedList<String> ();
char r = '0', g = '0', b = '0';
String rgb = "" + r + g + b;
while (!"ZZZ".equals (rgb))

if (b < ':' || ( b >= 'A' - 1 && b <= 'Z' ))

b++;

if (':' == b || 'Z' + 1 == b)

if (g < ':')

g++;
b = '9';

if (g < 'Z' + 1 && g > ':')

g++;
b = 'Z';


if (':' == g || 'Z' + 1 == g)

if (r < '9')

r++;
g = '9';

if (r < 'Z' + 1 && r > ':')

r++;
g = 'Z';


rgb = "" + r + g + b;
if ("999".equals (rgb))

r = 'A';
g = '0';
b = '0';

if ("A99".equals (rgb))

r = 'A';
g = 'A';
b = '0';

if ("AA9".equals (rgb))

r = 'A';
g = 'A';
b = 'A' - 1;

result.add (rgb);

System.out.println ("唯一序列号:\\n" + result.toString ().replaceAll ("[\\\\[\\\\]]", "").replaceAll ("\\\\, ", "\\n"));

追问

结果还是有差别,但是给到我灵感,先谢谢啦,我自己先琢磨,不懂的再请教吧!谢谢你。

追答

我真的看不出哪里有差别了,你别糊弄我,

不要随便整句话,说哪里不一样,让楼上楼下来评理。。。

如果你非要说排版和显示格式不一样,那我真要抽你了。。。

要么就采纳,要么就别抄我的思想,一句话

唯一序列号:
001
002
003
004
005
006
007
008
009
019
029
039
049
059
069
079
089
099
199
299
399
499
599
699
799
899
999
A01
A02
A03
A04
A05
A06
A07
A08
A09
A19
A29
A39
A49
A59
A69
A79
A89
A99
AA1
AA2
AA3
AA4
AA5
AA6
AA7
AA8
AA9
AAA
AAB
AAC
AAD
AAE
AAF
AAG
AAH
AAI
AAJ
AAK
AAL
AAM
AAN
AAO
AAP
AAQ
AAR
AAS
AAT
AAU
AAV
AAW
AAX
AAY
AAZ
ABZ
ACZ
ADZ
AEZ
AFZ
AGZ
AHZ
AIZ
AJZ
AKZ
ALZ
AMZ
ANZ
AOZ
APZ
AQZ
ARZ
ASZ
ATZ
AUZ
AVZ
AWZ
AXZ
AYZ
AZZ
BZZ
CZZ
DZZ
EZZ
FZZ
GZZ
HZZ
IZZ
JZZ
KZZ
LZZ
MZZ
NZZ
OZZ
PZZ
QZZ
RZZ
SZZ
TZZ
UZZ
VZZ
WZZ
XZZ
YZZ
ZZZ

你摸自己的良心说,哪一点跟你的提问的规则和要求不一样的??????????

追问

哥们,分数我不在乎的,只是真是不对,你看数字输出到99之后直接就到199-299-399。。。中间的序号不就丢了吗?
另外可能是我表述需求不明确,换句话说就是 [0-9 A-Z],来拼一个3位的唯一序号,能拼出多少个?

追答

你是要从001到999的递增???
那你就循环好了,还以为你就是那种二进制类似的地位向高位进位

参考技术A public class threeNO
public static void main(String[] args)
String str = "";
char[] a = '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z';

for(char i:a)
for(char j:a)
if('0' <= i && i <= '9' && 'A' <= j && j <= 'Z') continue;
for(char k:a)
if('0' <= i && i <= '9' && 'A' <= k && k <= 'Z') continue;
if('0' <= j && j <= '9' && 'A' <= k && k <= 'Z') continue;
str = "" + i + j + k;
System.out.println(str);




So easy!追问

可能是我表述需求不明确,换句话说就是 [0-9 A-Z],来拼一个3位的唯一序号,能拼出多少个? 要按照数字和字母的排序规则来得到数字字母混搭的结果。

参考技术B 使用Integer.toString(x,27)转换,然后前面缺0补零。追问

能道详细点么?最好贴代码,我想的从最后一位逐个判断至第一位,但是不高效,想要一个高效的排序方法。

追答

Integer。toString(x,r)可以将一个整数转换成r进制的数值的显示形式。不足3位的前面补零。
0-Z应该是10+26=36进制。上面写错了。

以上是关于用java实现字母与数字混合的唯一序号,且要递增的主要内容,如果未能解决你的问题,请参考以下文章

excel中怎么实现字符+数字混合自增(非拖动)

如何在Excel下拉中使字母自动递增 急急急急急!!!!!!!!!

excel表格中数字中含有字母可以实现依次递增吗

excel表格中字母加数字组合怎么进行递增

word怎么使序号递增?是文档,不是表格.我用seq \n 0试了,手动帖能递增,但是用替换就不行了.谁能解答一下

JAVA排序数字字母混合