簡體   English   中英

如何在第一個位置(0)之后正確分割此字符串,以便讀取0之后的一個或多個字符?

[英]how do I properly split this string after the first position (0) so that the one or more characters after 0 are read?

基本上,我有這段代碼,輸入2 3個字母/數字組合(如(AH,10D,JS和7C))作為西服的價值回讀(紅心王牌,鑽石10,黑桃傑克,7俱樂部。)

為什么如果輸入“ 10D”,代碼什么也沒打印回來? 為什么不注冊10? 我怎樣才能解決這個問題? 還:請幫助我弄清楚如何將案例2-案例10的范圍縮短到更雄辯的程度? 我不能使用if-then-else語句。

System.out.print("Please enter a letter/integer of a playing card (A, J, Q, K, or 2 - 10),\nfollowed by card type (D, H, S, C):");
    Scanner kbd = new Scanner(System.in);
    String userInput = kbd.next().toUpperCase();
    String valueofCard = userInput.substring(0, userInput.length() / 2);  // gives first half of string
    String suitofCard = userInput.substring(userInput.length() / 2); //give last half of string with + 1 if odd
    StringBuilder result = new StringBuilder();

    switch (valueofCard) {
    case "A":
        result.append("Ace of ");
        break;
    case "J":
        result.append("Jack of ");
        break;  
    case "Q":
        result.append("Queen of ");
        break;  
    case "K":
        result.append("King of ");
        break;
    case "2":
    case "3":
    case "4":
    case "5":
    case "6":
    case "7":
    case "8":
    case "9":
    case "10":          
        result.append(valueofCard + " of ");
    break;  
        }

    switch (suitofCard) {
    case "D":
        result.append("Diamonds");
        break;  
    case "H":
        result.append("Hearts");
        break;      
    case "S":
        result.append("Spades");
        break;      
    case "C":
        result.append("Clubs");
        break;
        }

    System.out.println(result.toString());

    kbd.close();

如果使用正則表達式 ,它也會為您拒絕錯誤的輸入。

正則表達式: ([AJQK2-9]|10)([DHSC])

樣例代碼:

String card = "QS"; // Queen of Spades

Pattern cardPattern = Pattern.compile("([AJQK2-9]|10)([DHSC])");

Matcher m = cardPattern.matcher(card);
if (! m.matches()) {
    System.out.println("Not a valid card: " + card);
} else {
    String rank = m.group(1);
    String suit = m.group(2);
    // code here
}

我相信問題在於,作為整數, 3 / 2 = 1所以當您輸入10D ,子字符串將位置計數器讀取為1而不是2,這使得字符串1代替10,這不是您的情況處理的。

我建議使用

if(userInput.length()>2)
{
    String valueofCard = userInput.substring(0,2);
    String suitofCard = userInput.substring(2);
}
else
{
    String valueofCard = userInput.substring(0,1);
    String suitofCard = userInput.substring(1);
}

編碼為特殊情況更簡單

喜歡

String valueofCard = userInput.substring(0, 1);
// unless starts with "10"
if (userInput.startWith ("10")) {
  valueofCard = userInput.substring(0, 2);     
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM