【问题标题】:Split function issue?拆分功能问题?
【发布时间】:2014-04-21 13:03:25
【问题描述】:

删除玩家用户1

代码在控制台上的上述输入下工作正常。它为我成功删除了播放器“user1”。但是,如果用户没有提及任何用户名,则会提示删除数组列表中存在的所有玩家。

removeplayer(后跟 enter),下面的代码失败,因为 str[1] 在这里什么都没有。 但我希望 str[1] 好像这个值为空,它可以帮助我删除所有玩家。

param="0";

System.out.print(">");

//type_op= in.next();

String str=in.nextLine();

String[] str1=str.split(" ");

type_op = str1[0];

param = str1[1];

String[] param_split = param.split(",");

if(type_op.equals("removeplayer") && param.equals(null))

removeAllPlayers();

else if(type_op.equals("removeplayer"))

removeplayer();

我也尝试过使用 next(),但在这种情况下,问题会变得更加复杂,因为在这种情况下,只有 removeAllPlayers() 有效。

【问题讨论】:

  • 我不确定是什么问题...当用户只在控制台中写入removeplayer 时是否会出现错误?如果是,则必须检查str1.length 是否为1。如果是,则分配param=null。如果不是,则分配param = str1[1]
  • 是的,现在可以通过检查 str1 的长度为 1 来工作。干杯!!
  • 我得到了这个工作。但是,一旦任何操作完成,这段代码[System.out.print(">");String str = in.nextLine();] 就会额外运行一次。这发生在我的 3 次手术中。我调试并检查了问题所在,但是我不知道出了什么问题。有趣的是,上面的 2 行代码为某些操作运行了额外的时间。编译器转到 in.nextLine(),不要求我提供输入,然后在它要求输入的下一次迭代中重新运行。其中一次迭代正在发生而没有输入任何值。

标签: java string split tokenize


【解决方案1】:

一个简单的解决方案是立即检查 str1 数组,以便通过检查数组长度来了解是否没有指定用户:

param = "0";

System.out.print(">");

//type_op= in.next();
String str = in.nextLine();

String[] str1 = str.split(" ");

type_op = str1[0];

if (type_op.equals("removeplayer") && str1.length == 1) {
    removeAllPlayers();
} else if (type_op.equals("removeplayer")) {

    param = str1[1];

    String[] param_split = param.split(",");

    removeplayer();
}

这只是一个简单快捷的解决方案,但它应该可以工作。 我希望这会对你有所帮助。

【讨论】:

  • 太棒了!这完美地工作。非常感谢尼古拉。
  • 我得到了这个工作。但是,一旦任何操作完成,这段代码[System.out.print(">");String str = in.nextLine();] 就会额外运行一次。这发生在我的 3 次手术中。我调试并检查了问题所在,但是我不知道出了什么问题。有趣的是,上面的 2 行代码为某些操作运行了额外的时间。编译器转到 in.nextLine(),不要求我提供输入,然后在它要求输入的下一次迭代中重新运行。其中一次迭代正在发生而没有输入任何值。
  • 你的问题不是很清楚。所以,我想你的“in”对象是一个 Scanner in = new Scanner(System.in);对?因此,在您读取 in.nextLine() 之前,缓冲区中的标准中可能已经有一些回车,这可能是由于之前与用户的一些交互。如果是这种情况你可以看看这个问题:stackoverflow.com/questions/18273751/…
【解决方案2】:

对比一下就可以了

if(type_op.equals("removeplayer") && param==null)

removeAllPlayers();

【讨论】:

  • 这将不起作用,因为数组超出范围。 str[1] 不存在。我通过检查 str1 的大小来实现这一点。
猜你喜欢
  • 1970-01-01
  • 2013-02-08
  • 2016-02-26
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 2013-11-27
  • 2011-12-03
相关资源
最近更新 更多