2013-03-15 46 views
0

上週我開始學習Groovy,並且遇到了一些代碼問題。 我想做什麼:搜索字符串並抓取第二場比賽

我有一個大名單和一個用戶輸入像「你好鮑勃我是蘇」,這是一個字符串給出。 我想取這個字符串,查看名字列表,如果字符串包含一個問候語和兩個名字,那麼抓住第二個名字並將它打印在如下輸出中: 「Hi Sue,很高興認識你」。 在上面的例子中給出的名字「鮑勃」將永遠是相同的,所以在我的代碼中,我把它放在一個單獨的字符串中,但後續的名稱可以是任何名稱(實際上,它也可以是一個不是名稱在名單中,但我不知道如何解決這個問題,所以這是另一回事)。

到目前爲止我有什麼是沒有多少:

String fixedname=new String('bob') 
def name=["bob","sue","peter","dr spock"] 
def greeting=["hi","hello"] 
String input= new String ('Hi bob i am sue') 

if(input.contains(fixedname) || input.contains(greeting)) 

「然後看看名單,並打印其自帶fixedname後的名稱」 我不知道如何將引號之間的句子放入正確的代碼中。有人可以幫忙或給我一個提示嗎?

提前和親切的問候感謝, 吉

回答

1

你可能看看使用正則表達式。這是一個使用你的例子的概念的快速教授。

def matcher= ('Hi bob i am dr spock'.toUpperCase() =~ /HI BOB I AM (SUE|PETER|DR SPOCK|BOB)/) 
assert matcher[0][1]== 'DR SPOCK' 
println("Hi ${matcher[0][1]}, nice to meet you") 
0

你的意思是這樣的嗎?

String fixedname = 'Bob' 
List names = [ 'Bob', 'Sue', 'Peter', 'Dr Spock' ] 
List greeting = [ 'Hi', 'Hello' ] 

String input = 'Hi Bob I am Sue' 

      // if the input string contains one of the greetings 
def others = greeting.find { input.contains(it) } ? 
       // Split the string and return all names apart from the first one 
       input.tokenize().findAll { it in names }.drop(1) : 
       // Otherwise others = null 
       null 

assert others == [ 'Sue' ] 

雖然我懷疑你正在嘗試做的是不平凡的,你可能會更好尋找到某種自然語言處理庫