【发布时间】:2012-08-04 06:08:59
【问题描述】:
我正在尝试计算 java 字符串中出现的字符数。
例如:
给定扑克手牌 6s/3d/2H/13c/Ad
/ 字符出现了多少次? = 4
用户可以输入不同数量的牌变量,因此硬编码检查出现次数的方法是行不通的。
分隔符可以是以下任何一种: - / 空格(一只手只允许使用一种分隔符类型)。 所以我需要能够检查是否有任何一个分隔符出现了 4 次,否则给出了不正确的格式。
这是一些 java 代码,可以更好地了解我正在尝试做什么:
String hand = "6s/1c/2H/13c/Ad";
System.out.println("Original hand: " + hand);
// split the hand string into individual cards
String[] cards = hand.split(hand);
// Checking for separators
// Need to check for the correct number of separators
if(hand.contains("/")){
cards = hand.split("/");
} else if (hand.contains("-")){
cards = hand.split("-");
} else if (hand.contains(" ")){
cards = hand.split(" ");
} else {
System.out.println("Incorrect format!");
}
任何帮助都会很棒!
这也是一个学校项目/家庭作业。
编辑 1--------------------------------------------------------- ------------
好的,根据你的建议,这是我的代码
String hand = "6s 1c/2H-13c Ad";
System.out.println("Original hand: " + hand);
// split the hand string into individual cards
String[] cards = hand.split("[(//\\-\\s)]");
if (cards.length != 5) {
System.out.println("Incorrect format!");
} else {
for (String card : cards) {
System.out.println(card);
}
}
上面给定的手牌格式不正确,因为用户只能对给定的手牌使用一种类型的分隔符。例如:
- 6s/1c/2H/13c/Ad - 正确
- 6s-1c-2H-13c-Ad - 正确
- 6s 1c 2H 13c 广告 - 正确
如何确保用户只使用一种分隔符??
为到目前为止的答案干杯!
编辑 2 ------------------------------------------
所以使用嵌套的 if 语句,我的代码现在看起来像这样:
String hand = "6s/1c/2H/13c/Ad";
System.out.println("Original hand: " + hand);
// split the hand string into individual cards
if(hand.contains("/")){
String[] cards = hand.split("/");
if(cards.length != 5){
System.out.println("Incorrect format! 1");
} else {
for (String card : cards) {
System.out.println(card);
}
}
} else if(hand.contains("-")){
String[] cards = hand.split("-");
if(cards.length != 5){
System.out.println("Incorrect format! 2");
} else {
for (String card : cards) {
System.out.println(card);
}
}
} else if(hand.contains(" ")){
String[] cards = hand.split(" ");
if(cards.length != 5){
System.out.println("Incorrect format! 3");
} else {
for (String card : cards) {
System.out.println(card);
}
}
} else {
System.out.println("Incorrect format! 4");
}
这种方式按预期工作,但很丑!
任何建议都会非常高兴。
【问题讨论】:
-
这是家庭作业,只是一个提示。
split方法允许使用正则表达式,这可能会解决您的问题。请看docs.oracle.com/javase/6/docs/api/java/util/regex/… -
谢谢。我一直在尝试使用正则表达式,但如果给定的手被改变,它似乎不起作用。例如,用户可以输入 AS/13D/JS/13S/AD,这会改变分隔符出现的位置。但这么说可能是我做正则表达式的方式。干杯。
-
@user1575658 你试过什么正则表达式?
-
发布您的正则表达式,然后让 SO 为您提供帮助。
-
这是我的正则表达式 [(//\\-\\s)]