我在从用户那里获取String输入时遇到一些困难,如下面的代码所示,将标记分开并将它们推入字符串数组中。在我尝试运行positions.split(“”)之后,输入被正确记录; dataString数组不接受分隔的字符串。我要做的是取一组数字,例如:1 3 4然后将它们分成单独的标记,然后实例化一个长度为3的数字串字符串数组,并在每个数字中插入数字1,3和4位置。
Scanner input = new Scanner(System.in);
String[] dataString;
String positions;
...
System.out.print("Hand:" + currentHand);
input.nextLine();
System.out.print("\nEnter positions of cards to keep (e.g. 1 4 5 ):");
positions=input.nextLine();
dataString = positions.split(" ");
if (dataString.length > 5) {
System.out.print("You can hold a maximum of 5 cards");
positions = input.nextLine();
dataString = positions.split(" ");
}
input.close();
答案 0 :(得分:1)
似乎可能是How to split a String by space
的副本另一方面,您应该考虑使用循环来检查dataString的长度。 :)
while (dataString.length > 5){
System.out.print("You can hold a maximum of 5 cards");
positions = input.nextLine();
dataString = positions.split("\\s+");
}
答案 1 :(得分:0)
dataString数组不接受分隔的字符串。
是的,确实如此。 .split(" ")
与String
"1 2 3"
完全相同。
调试代码。你在哪里:
dataString = positions.split(" ");
把:
System.out.println("Positions entered: \""+positions+"\"");
dataString = positions.split(" ");
System.out.println("dataString obtained: "+java.util.Arrays.toString(dataString));
然后,如果您输入1 2 3
,您将获得输出:
Positions entered: "1 2 3"
dataString obtained: [1, 2, 3]
你会看到,分割String
没有问题。
您可能遇到重复空格的问题。在这种情况下,您可以使用以下方法删除它们:
dataString = positions.replaceAll("\\s+", " ").trim().split(" ");
而不是:
dataString = positions.split(" ");
在拆分之前,应将" 1 2 3 "
之类的字符串转换为"1 2 3"
。