Java-如何在字符串中检查下一个即将出现的空格?(适用于IRC Bot)

Java-如何在字符串中检查下一个即将出现的空格?(适用于IRC Bot),java,string,bots,irc,Java,String,Bots,Irc,显然,对于IRC bot,输入是由用户键入单个字符串生成的,通常带有一个命令和几个参数,每个参数之间用空格分隔。我正在使用Java编写一个IRC机器人程序,并希望解析可能在字符长度上有所不同的参数,并将它们保存到多个字符串中供以后使用。我想发出如下命令: bot.command argument1 argument2 argument3 我希望这样,如果消息以bot.command开头,那么user将存储argument1,time将存储argument2,date将存储argument3。但

显然,对于IRC bot,输入是由用户键入单个字符串生成的,通常带有一个命令和几个参数,每个参数之间用空格分隔。我正在使用Java编写一个IRC机器人程序,并希望解析可能在字符长度上有所不同的参数,并将它们保存到多个字符串中供以后使用。我想发出如下命令:

bot.command argument1 argument2 argument3
我希望这样,如果消息以
bot.command
开头,那么
user
将存储
argument1
time
将存储
argument2
date
将存储
argument3
。但问题是,
argument1
argument2
argument3
的字符长度可能会有所不同,因此执行类似于
time=message.substring(33,message.length())
的操作将在参数末尾停止读取,但它不会始终读取
argument3
文本开始的字符串。我需要检测分隔符空间的位置,然后从一个字符开始读取
argument3
。我不能用If语句来确定参数可能是什么,因为它们可能是任何东西。这是一个模板,如果上面的段落不清楚:

String message //= the IRC message and bot input
String user;
String time;
String date;
if (message.startsWith("bot.command")) {
    user = message.substring(13, detect next space here and stop reading one character before);
    time = message.substring(detect where previous space was and start one character after that, end before next space);
    date = message.substring(detect where previous space was and start one character after that, message.length());
}

我希望这能说明我想做什么。谢谢你的帮助

我建议使用String.split,它使用分隔符正则表达式将字符串拆分为数组。在您的情况下,您可以执行以下操作:

String[] args = message.split("\\s+");
if (args[0].equals("bot.command"))
{
    user = args[1];
    ...
}
我之所以使用模式
\s+
(匹配一个或多个空格字符)而不是一个空格,是因为这样,如果参数被多个空格或类似于选项卡的内容分隔,程序就不会崩溃。

编辑(删除了StringTokenizer示例)-

因为
StringTokenizer
显然是“遗留”,所以我会使用这样的-

String message = "BOT.command USER_X    THIS_IS_A_TIME THIS_IS_A_DATE";
String user = null;
String time = null;
String date = null;
// Use toLowerCase - assuming it's case insensitive.
if (message.toLowerCase()
    .startsWith("bot.command")) {
  Scanner st = new Scanner(message);
  if (st.hasNext()) {
    st.next();
  }
  if (st.hasNext()) {
    user = st.next();
  }
  if (st.hasNext()) {
    time = st.next();
  }
  if (st.hasNext()) {
    date = st.next();
  }
}
System.out.printf(
    "User = %s,  Time = %s, Date = %s\n", user,
    time, date);
输出为

User = USER_X,  Time = THIS_IS_A_TIME, Date = THIS_IS_A_DATE

如果在不确定将输入多少空格分隔的输入字的情况下进行用户输入,可以执行以下操作:

String[] terms = message.split("\\s+");
for(String word1 : terms) {
//    doSomething() 
}

但是在你的例子中,你只需要3个参数,因此循环将在for循环中进行3次。

看看
indexOf
,或者甚至可能是
split
。试试split,也许类似问题的答案会有帮助:谢谢!对我来说,这似乎是最好、最明确的选择。再次感谢大家!