Java-如何在字符串中检查下一个即将出现的空格?(适用于IRC Bot)
显然,对于IRC bot,输入是由用户键入单个字符串生成的,通常带有一个命令和几个参数,每个参数之间用空格分隔。我正在使用Java编写一个IRC机器人程序,并希望解析可能在字符长度上有所不同的参数,并将它们保存到多个字符串中供以后使用。我想发出如下命令: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。但
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,也许类似问题的答案会有帮助:谢谢!对我来说,这似乎是最好、最明确的选择。再次感谢大家!