2015-11-05 84 views
-3

我正在使用Pircbot框架爲Java中的IRC Bot命令。查找變量是否設置爲Java

if (message.contains("!goawaybot")){ 
    String[] parts = message.split(" "); 
    //use the parts variable to find if the command has an argument 
    //if yes, part with that message, else: 
    partChannel(channel, "Leaving"); 
} 

如果有一種說法,(即; 「!goawaybot DERP」),那麼它應該有這樣的說法爲理由(I,E; 「DERP」)的一部分。否則,它將與通用的「離開」消息一起。

+1

我不明白你在問什麼 – Frakcool

+0

我認爲這很明顯OP是在收到字符串「!goawaybot」後嘗試提取可選的文本塊。 – dimo414

回答

1

正如我理解您的需求:

message可以包含文本 「!goawaybot」。如果是,則使用!goawaybot作爲參數partChannel()的參數,或者如果沒有提供「離開」,則使用任何文本呼叫partChannel()

分割空白是有問題的;其中最重要的是它使處理多字消息變得不必要地困難。

這是regular expressions的標準問題。定義一個正則表達式,是這樣的:

^.*!goawaybot(.+)?$ 

Regular expression visualization

如果message這正則表達式匹配,爲您partChannel()消息使用組1的值(如果存在的話)。

E.g.

final Pattern GO_AWAY_BOT = Pattern.compile("^.*!goawaybot(.+)?$"); 

... 

Matcher m = GO_AWAY_BOT.matcher(message); 
if (m.matches()) { 
    partChannel(channel, m.group(1) != null ? m.group(1) : "Leaving"); 
} 
+0

我正在尋找「消息可能含有!goawaybot _ **開頭** _」。剩下的答案應該可以工作。謝謝。 –

+0

在這種情況下,只需從正則表達式的開頭刪除'。*'。 – dimo414

+0

我知道,爲什麼你的答案是被接受的。 –

0

String reason = (parts[1] != null) ? parts[1] : "Leaving";

並使用reason而不是在部分命令 「離開」。

+1

如果拆分不包含第二個標記,則此代碼將拋出異常,因爲'parts [1]'將超出數組範圍。 –