【问题标题】:Alphanumeric Counter in talend to generate idtalend中的字母数字计数器生成id
【发布时间】:2020-11-03 15:06:53
【问题描述】:

我正在尝试在 talend 中找到一种方法来生成一个字母数字计数器,该计数器以下列方式创建数字:YYXXXXXXXX

在哪里

  • YY 是日历年
  • XXXXXXXX 是字母数字计数器的 id(每年从 00000001 到 ZZZZZZZZ 的起始序列号)

每个新年,8个字符的ID都应该重置并从00000001重新开始

序列应该看起来像

00000001
00000002
00000003
...
99999999

A0000001
A0000002
A0000003
...
A9999999

B0000001
B0000002
B0000003
...
B9999999

Z0000001
Z0000002
Z0000003
...
Z9999999
...

ZA000001
ZA000002
ZA000003
...
ZA999999

......
ZZZZZZZZ

最后一个数字应该是 ZZZZZZZZ。所以它会先是 1-9,然后是 A-Z。

而一年中我们能容纳的最后一个id是20ZZZZZZZZ

如何做到这一点?

【问题讨论】:

  • 您好,欢迎来到 stackoverflow。到目前为止,您尝试过什么?你被什么困住了? Stackoverflow 不是“家庭作业/为我编写代码”服务。如果您事先表明自己已经付出了一些努力,那么您将更有可能得到别人的帮助。
  • 该描述看起来像一个以 36 为基数的数字系统。您所要做的就是创建一个接受 int 并以 36 为基数返回的函数。然后这只是连接年份的问题。
  • 你能举个例子吗

标签: java talend talend-mdm


【解决方案1】:

基本上它将一个数字(长整数)转换为以 36 为底的基数,用前面的零填充以匹配格式,连接当前年份的最后两位数字并将结果作为字符串返回。

import java.time.LocalDateTime; //for getting the current year from system clock
public static String codegen(long input) {
    String lastTwoDigitsOfYear = Integer.toString(LocalDateTime.now().getYear()).substring(2); // the "YY"
    String radixOf36Base = Long.toString(input, 36).toUpperCase();
    String radixOf36BasePadded = String.format("%8s", radixOf36Base).replace(' ', '0'); //the "XXXXXXXX"
    return lastTwoDigitsOfYear + radixOf36BasePadded; //YYXXXXXXXX
    }

【讨论】:

  • 内存不足异常。有人可以帮我写代码吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多