1

我在从用户那里获取字符串输入时遇到了一些困难,如下面的代码所示,分离令牌并将它们推入字符串数组。但是在我尝试运行 position.split(" "); 之后,输入被正确记录。dataString 数组不接受分隔的字符串。我要做的是获取一组数字,例如:1 3 4 然后将它们分成单独的标记,然后实例化一个长度为 3 的 dataString 字符串数组,分别插入数字 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();
4

2 回答 2

1

这似乎是如何按空格分割字符串的可能副本

另一方面,您应该考虑使用循环来检查 dataString 的长度。:)

while (dataString.length > 5){
   System.out.print("You can hold a maximum of 5 cards");
   positions = input.nextLine();
   dataString = positions.split("\\s+");
}
于 2013-05-16T18:32:05.807 回答
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"

于 2013-05-16T18:43:18.513 回答