【问题标题】:how to make an incrementing numeric String as an id?如何将递增的数字字符串作为 id?
【发布时间】:2018-06-03 22:08:11
【问题描述】:

您好,我一直在尝试找到一种方法来在一个类中创建一个 ID,该类是一个字符串,并且具有为所创建的类的每个实例增加的数值。我找到了向我展示如何使用整数但我想使用字符串的指南。我不知道我将如何做到这一点。

	import java.util.ArrayList;


public class Order {
		
	private String orderID;
	
    Order(String orderID) {
		setOrderID(orderID);	
	}
	
	public void setOrderID(String orderID) {
		this.orderID=orderID;
	}
	
   }

【问题讨论】:

  • 这看起来像 Java,没有 JavaScript。
  • 当整数更合适时,为什么要使用字符串?
  • 如果你决定使用String作为变量,你应该将id生成为int或long,然后使用String.valueOf()将它作为String存储在这个类中
  • 使用 static int counter = 0 并在构造函数中递增

标签: java string auto-increment


【解决方案1】:

对象的每个实例都独立于其他实例。因此,如果没有您自己分配,Order 对象就无法神奇地拥有比您创建的前一个实例高一个的数值。如果您有一个带有递增索引的循环,您可以将它们连续插入到列表中。但是,要使用字符串,您必须先将索引转换为字符串。我会这样做:

输出:

OrderID: 0
OrderID: 1
OrderID: 2
OrderID: 3
OrderID: 4

代码:

import java.util.ArrayList;

public class F {

  public static void main(String[] args) {
    ArrayList<Order> orders = new ArrayList<Order>();
    Order order;
    String orderID;

    for (int i = 0; i < 10; i++) {

      orderID = Integer.toString(i);        // Convert the index to a String
      order = new Order(orderID);           // Instantiate a new Order object with the String
      orders.add(order);                    // Add the String to the list
    }

    // Loop through the list
    for (Order o : orders) {
      System.out.println(o.getOrderID());
    }

  }
}

class Order {

    private String orderID;

    Order(String orderID) {
        setOrderID(orderID);
    }

    public void setOrderID(String orderID) {
        this.orderID=orderID;
    }

  // Getter method
  public String getOrderID() {
    return this.orderID;
  }

 }

【讨论】:

  • Order 类将进入一个名为 Costumer 的类中的 hashmap。所以我希望不要使用for循环,而是使用风格的东西。 String orderID = (Integer.parseInt(version.substring(1,version.length()))+1);我不知道如何实现这一点。但是
【解决方案2】:

据我了解,您需要使用静态 int 变量。

【讨论】:

    【解决方案3】:

    如果你真的想使用字符串,你可以为你的类添加一个静态计数器并将值分配为字符串:

    public class Order {
    
        private static final int orderCount = 0;
        private final String orderID;
    
        Order() {
            this.orderCount++;
            this.orderID = String.valueOf(this.orderCount);
        }
    
    }
    

    【讨论】:

    • 如果我让它工作的话,这似乎对我想要做的事情有用。也许我应该写这个,但我想将属性作为字符串的原因是我不希望它适用于数学公式。我的大学教授也要求哈哈:)
    • 对于不成问题的事情来说,这听起来像是一个非常糟糕且不必要的解决方案。如果您编写代码,您将负责该属性的用途,除非您为此编写特定代码,否则您不会“意外”在任何数学公式中使用它。我会将其保留为私有整数,如果您需要将其公开为字符串,请使用执行 String.valueOf 的 getter。
    • @OptimusCrime 当然,这个解决方案并不理想,在现实世界的情况下它根本没有任何意义,但正如他所说,这是为了他的大学,我想这只是为了学习目的
    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 2017-01-10
    • 2014-10-08
    • 2013-11-30
    • 1970-01-01
    相关资源
    最近更新 更多