0

我上周开始学习 Groovy,但遇到了一些代码问题。我想做的事:

我有一个很大的名称列表和一个用户输入,例如“Hi Bob I am Sue”,它以字符串形式给出。我想获取这个字符串,查看名称列表,如果该字符串包含一个问候语和两个名称,则获取第二个名称并将其打印在如下输出中:“Hi Sue, nice to meet you”。上面例子中给出的名字“Bob”总是一样的,所以在我的代码中我把它放到了一个单独的字符串中,但是后面的名字可以是任何名字(其实也可以是不在名单,但我不知道如何解决这个问题,所以这是另一回事)。

到目前为止我得到的并不多:

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)) 

“然后查看名称列表并打印固定名称之后的名称。” 我不知道如何将引号之间的句子放入正确的代码中。有人可以帮忙或给我一个提示吗?

非常感谢提前和亲切的问候,凯特

4

2 回答 2

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")
于 2013-04-08T03:25:07.890 回答
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' ]

尽管我怀疑您尝试做的事情并非微不足道,但您可能会更好地研究某种自然语言处理库

于 2013-03-15T11:46:27.220 回答