0

先週 Groovy の学習を開始しましたが、一部のコードで問題が発生しています。私がしたいこと:

名前の大きなリストと、文字列として指定された「Hi Bob I am Sue」のようなユーザー入力があります。この文字列を取得し、名前のリストを調べて、文字列に挨拶と 2 つの名前が含まれている場合は、2 番目の名前を取得して、次のように出力します:「こんにちはスー、はじめまして」。上記の例で与えられた名前「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)) 

"次に、名前リストを調べて、fixedname の後に続く名前を出力します。" 引用符の間の文を適切なコードに入れる方法がわかりません。誰か助けてくれたり、ヒントを教えてくれませんか?

よろしくお願いします、キャット

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 に答える