给出字符串数值

时间:2013-11-08 21:34:44

标签: java string int numeric

如何为Java中的字符串分配数值?我正在使用从Ace到国王的牌,我想将值11分配给“Jack”,这样我就可以将它与“Six”进行比较。 有什么想法吗?

3 个答案:

答案 0 :(得分:2)

如果你使用支持枚举的语言,这些可能是你最好的选择。例如,在C#中,你可以这样做(这是粗略的,未经测试的):

public enum CardDeck
{
1 = 1,
2 = 2,
3 = 3,
...
Jack = 10,
Queen = 11,
King = 12,
Ace = 13
}

然后你可以比较(if(int)Ace ==(int)1){}

答案 1 :(得分:1)

使用HashMaps:

Map<String,Integer> map = new HashMap<>();
map.put("Jack", 11);

答案 2 :(得分:0)

您有几个选择。例如,您可以将字符串存储在数组中并搜索它们,并返回索引:

List<String> names = new ArrayList<String>();
names.add("ace");
names.add("two");
names.add("three");

int number = names.indexOf("ace");

您可以使用字符串映射到数字并进行查找,这允许使用非连续数字:

Map<String,Integer> names = new HashMap<String,Integer>();
names.put("ace", 1);
names.put("jack", 11);
names.put("queen", 12);

int number = names.get("ace");

您还可以使用带有属性的枚举,例如:

enum CardValue {
  ACE(1),
  JACK(11),
  QUEEN(12);
  final int value;
  CardValue (int value) { this.value = value; } 
  int getValue () { return value; }
}

int number = Enum.valueOf(CardValue.class, "ace".toUpperCase()).getValue();

或者在上面,如果它们是连续的,你可以使用ordinal()

根据需要添加错误处理。

您也可以使用强力大if,或使用切换块(自Java 1.7起):

int value (String name) {
    switch (name.toLowerCase()) {
    case "ace": return 1;
    case "jack": return 11;
    case "queen": return 12;
    default: return -1;
}

就个人而言,我会在你的情况下采用阵列或地图方法。编码很简单,允许将字符串轻松转换为值和返回,并且与枚举技术不同,它不会将编译时类型名称与用户输入字符串联系起来(例如,如果您添加对另一种语言的支持则很难)

开关块也很容易编码。