【问题标题】:How do you convert from a string to an int in Java?如何在 Java 中将字符串转换为 int?
【发布时间】:2015-01-29 23:39:25
【问题描述】:

所以我必须制作一个卡片项目,它需要一个字符串,例如“红心六”,并根据数字(六)和花色(红心)的值将其转换为整数数组。关于如何让 java 获取字符串“6”并输出 6,我遇到了困难……有什么提示吗?

编辑: 俱乐部 = 0; 黑桃 = 3; 心= 2; 钻石 = 1;

【问题讨论】:

  • 使用 switch 语句。
  • 有困难。尽管在这个简单的原因中,创建一个小写值的Map<String, Integer>。然后只需使用Map.get
  • 数字”王牌或王牌的价值是多少?

标签: java string int


【解决方案1】:

您可以使用地图。您也可以使用 case 或 if else 语句来完成此操作。

    HashMap<String, Integer> numbers = new HashMap<String, Integer>();
    numbers.put("ace", 1);
    numbers.put("two", 2);
    numbers.put("three", 3);
    numbers.put("four", 4);
    numbers.put("five", 5);
    numbers.put("six", 6);
    numbers.put("seven", 7);
    numbers.put("eight", 8);
    numbers.put("nine", 9);
    //etc...
    HashMap<String, Integer> suits = new HashMap<String, Integer>();
    suits.put("clubs", 0);
    suits.put("spades", 3);
    suits.put("hearts", 2);
    suits.put("diamonds", 1);

    numbers.get("zero");//use this to access the number
    suits.get("spades");//use this to access the suit

区分大小写在这里很重要,因此请确保密钥与您传递的任何内容相匹配以访问该值...

【讨论】:

  • 可能要提一下,OP 应该使用String.toLowerCase
【解决方案2】:

这通常是你会使用枚举的东西:

enum Suit{
 CLUBS   ("clubs", 0),
 DIAMONDS("diamonds", 1),
 HEARTS  ("hearts", 2),
 SPADES  ("spades", 3);

 private final String name;
 private final int value;
 private static final HashMap<String, Suit> suitByName;
 static {
    suitByName = new HashMap<String, Suit>();
    for (Suit s: Suit.values()){
        suitByName.put(s.name, s);
    }
 }

 Suit(String name, int value){
     this.name = name;
     this.value = value;
 }
 public int getValue(){
    return this.value;
 }

 public static Suit fromString(String card){
    return suitByName.get(card.toLowerCase());
 }
}

省略了卡值的代码。遵循相同的方法。

【讨论】:

    【解决方案3】:

    有多种方法可以做到这一点,但在我看来,最简单的方法是有一个映射,其中字符串键是数字的单词,即“六”,返回的值是整数值.

    所以你的代码看起来像这样

    HashMap<String, Integer> numMap = new HashMap<String, Integer>();
    numMap.put("two", 2);//repeat for all numbers
    

    然后,当您需要数字时,您可以使用numMap.get("two")

    【讨论】:

    • 曾经流行的黑桃之一?
    • @ElliottFrisch 绝对,你从未使用过它?
    • @CBredlow 我一直在使用它;现在再告诉我这个扑克的规则吗?
    • @ElliottFrisch 您从未听说过“我有一个袖子吗?”这句话。不也是死人手的一部分吗?
    • @ElliottFrisch 看,两个 8 和两个 1!但在其他新闻中,我修复了我的代码以使用 2 而不是 1 作为示例。
    【解决方案4】:

    你可以稍微混合一下。

    1. 将输入字符串拆分为字符串数组。 B. 结果
    2. 索引单元格 0 处的数组将包含数字。 C. 结果
    3. 索引单元格 2 处的数组将包含形状。

    现在您只需将数字转换为实际数字。这可以通过SwitchMap 来实现。

    将 Shape 转换为表示形状的实际数字也是如此。

    【讨论】:

      【解决方案5】:

      另一种方法,基于查找数组中元素的索引:

      String str = "Six of Hearts"; //input string
      String[] numbers = new String[]{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "jack", "queen", "king", "ace"};
      String[] suits = new String[]{"clubs", "diamonds", "hearts", "spades"};
      String[] name = str.split(" ");
      if (name.length != 3) throw new Exception("Improperly formatted card name");
      int value = Arrays.asList(numbers).indexOf(name[0]);
      int suit = Arrays.asList(suits).indexOf(name[2]);
      

      【讨论】:

        【解决方案6】:

        枚举在这种情况下非常有用..See Documentation.

        首先创建一个 CardValue 的枚举,例如。 ACE TWO..

        enum CardValue {
        
                ACE(1),TWO(2),THREE(3),FOUR(4),
                FIVE(5),SIX(6),SEVEN(7),EIGHT(8),
                NINE(10),TEN(10),JACK(10),QUEEN(10),KING(10);
        
                private int cardValue;
        
                private CardValue (int cardValue){
                    this.cardValue = cardValue;
                }
        
                public String toString(){
                    return String.valueOf(cardValue);
                }
        
            }
        

        第二次创建一个 CardSuit 的枚举,例如。 HEARTS CLUBS..

            enum CardSuit {
                DIAMONDS(1),HEARTS(2),SPADES(3),CLUBS(4);
                private int cardSuit;
                private CardSuit(int cardSuit){
                    this.cardSuit = cardSuit;
                }
        
                public String toString(){
                    return String.valueOf(cardSuit);
                }
        
            }
        

        那就试试这个吧。

            public static void main(String[] args){
                String inputedCard = "Six of Hearts";
        
                //Converts inputed card to uppercase then split it.
                //so the expected value is aInputedCard[0] = SIX & aInputedCard[1] = HEARTS
                String [] aInputedCard = inputedCard.toUpperCase().split(" OF ");
        
                //So you just need to Verify if the input is in correct format to avoid exceptions
        
                System.out.println("["+CardValue.valueOf(aInputedCard[0])+"]["+CardSuit.valueOf(aInputedCard[1])+"]");
        
            }
        

        【讨论】:

          【解决方案7】:

          我认为你可以使用Integer.parseInt(String)

          【讨论】:

            猜你喜欢
            • 2021-08-01
            • 1970-01-01
            • 2013-11-03
            • 2012-10-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-12
            相关资源
            最近更新 更多