【问题标题】:How to generate an incremental alphanumeric ID in java?(String ID)如何在 java 中生成递增的字母数字 ID?(字符串 ID)
【发布时间】:2017-02-01 22:15:32
【问题描述】:

我有一个方法,例如,

public Order newOrder(Product prod, Supplier supp)

并且需要生成一个唯一的字母数字代码,格式为“ordn”,其中“n”是从 1 开始的累进数字,因此每次添加新订单时,ID 都会递增为“ord2”“ord3”。 ..

我该怎么做?是否可以通过子串来做到这一点?

我知道如何生成一个整数ID,但是这是一个字符串,所以我的问题更像是如何在字符串中增加一个整数。

我尝试将其子串化为String ocode = "ord" + n,并仅增加“n”,但如何将整个内容分配给新订单?还是我需要一个循环? (我猜代码必须是一个字符串,后来有一个 findOrder() 方法通过接受字符串代码来检索特定订单。

顺便说一句,我是 Java 新手,这只是练习的一部分。


解决了,结果子字符串有效...

【问题讨论】:

  • 你对实现你想要的逻辑有什么想法?
  • 那么问题是如何生成一个升序整数序列?
  • 如果您的程序重新启动会发生什么。从 1 开始,还是从中断的地方继续?你想把它保存在哪里?通常,您让数据库为您做类似的事情。
  • @Andreas 您只需要维护一个共享的(最终)持久状态,并以任何形式进行原子访问——这不必是数据库。事实上,如果这是一个只负责提供增量 id 的微服务,那么对于 1 个 int 来说,一个 DB 将是一个巨大的过度杀伤。

标签: java


【解决方案1】:

您可以使用static (tutorial) int,并为每个订单增加 1。静态计数器的当前值为当前订单的id。当您需要返回字符串ordn 时,您返回"ord"+id。这是一个简单的例子:

public class Order {

    static int sharedCounter = 0; //static, shared with ALL `Order` instances
    int orderId = 0; //Specific to particular `Order` instance

    public Order() {
       this.orderId = sharedCounter++;
    }

    public String getOrderId(){
       return "ord"+this.orderId;
    }
}

请注意,每次执行程序时,静态 ID 都会从零开始。如果您将其编写为练习,那可能很好;但如果您需要为现实世界中的某些订单实际生成唯一 ID,那么您需要将该信息存储在某个地方,可能是数据库。

另外,请注意,我在示例中使用了共享的int,它不是线程安全的。如果线程安全很重要,您需要AtomicInteger

【讨论】:

  • 不过,您仍然需要返回一个字符串。
  • 谢谢,我确实是这样做的,但是我需要返回一个字符串代码并将其分配给新订单。
【解决方案2】:

试试

String newOrderId = "ord" + (Integer.parseInt(lastOrderId.substring(3)) + 1);

【讨论】:

  • 非常糟糕的建议。除了您需要显式跟踪您的最后一个使用字符串操作的订单实例、解析它们、在您实际拥有一个 int 时对它们进行切片之外,还有什么比一行代码更糟糕的呢?
  • “Try this” answers are not useful。请添加一些解释。仅代码的答案对未来的读者不太有用,并且不能解释 OP 的错误或如何解决问题。
  • @OlegSklyar,这种方法没有任何问题。这完全是一个见仁见智的问题。我个人喜欢这样,因为我不必跟踪不具有任何商业价值的附加静态变量。在批评任何事情之前先考虑其他观点。
  • @Xufox,虽然我很欣赏你的建议,但在这种情况下,这只是一个不言自明的代码。 OP没有犯任何错误。他只是在询问“如何做”。
  • @VHS 你个人对你的方法的喜好并没有让它变得更好。我同意,我的观点绝对是主观的,但是从任何客观衡量标准来看,你的解决方案都非常糟糕
猜你喜欢
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
相关资源
最近更新 更多