[英]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.