/* package whatever; // don't place package name! */
import java.util.* ;
class TokenMatcher {
public TokenMatcher( List< String> tokenList) {
this .tokenList = tokenList;
}
List< String> tokenList;
List
< String
> findSentencesWith
( String ...
tokens ) { List< String> results = new ArrayList< String> ( ) ;
// start by assuming they're all good...
results.addAll ( tokenList) ;
for ( String str
: tokenList
) { // ... and remove it from the result set if we fail to find a token
if ( ! str.contains ( t) ) {
results.remove ( str) ;
// no point in continuing for this token
break ;
}
}
}
return results;
}
{
List< String> tokenList = new ArrayList< String> ( ) ;
tokenList.add ( "How now a1 cow." ) ;
tokenList.add ( "The b1 has oddly-shaped a2." ) ;
tokenList.add ( "I like a2! b2, b2, b2!" ) ;
TokenMatcher matcher = new TokenMatcher( tokenList) ;
List< String> results = matcher.findSentencesWith ( "a1" ) ; // Returns 1 String ("How now a1 cow")
System .
out .
println ( "1 - result: " + r
) ; }
List< String> results2 = matcher.findSentencesWith ( "b1" ) ; // Returns 1 String ("The b1 has oddly-shaped a2.")
System .
out .
println ( "2 - result: " + r
) ; }
List< String> results3 = matcher.findSentencesWith ( "a2" ) ; // Returns the 2 Strings with a2 in them since "a2" is all we care about...
System .
out .
println ( "3 - result: " + r
) ; }
List< String> results4 = matcher.findSentencesWith ( "a2" , "b2" ) ; // Returns 1 String ("I like a2! b2, b2, b2!.") because we care about BOTH tokens
System .
out .
println ( "4 - result: " + r
) ; }
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwoKY2xhc3MgVG9rZW5NYXRjaGVyIHsKCQkKCXB1YmxpYyBUb2tlbk1hdGNoZXIoTGlzdDxTdHJpbmc+IHRva2VuTGlzdCkgewoJCXRoaXMudG9rZW5MaXN0ID0gdG9rZW5MaXN0OwoJfQoJCiAgICBMaXN0PFN0cmluZz4gdG9rZW5MaXN0OwoKICAgIExpc3Q8U3RyaW5nPiBmaW5kU2VudGVuY2VzV2l0aChTdHJpbmcuLi4gdG9rZW5zKSB7CiAgICAgICAgTGlzdDxTdHJpbmc+IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKCiAgICAgICAgLy8gc3RhcnQgYnkgYXNzdW1pbmcgdGhleSdyZSBhbGwgZ29vZC4uLgogICAgICAgIHJlc3VsdHMuYWRkQWxsKHRva2VuTGlzdCk7CgogICAgICAgIGZvciAoU3RyaW5nIHN0ciA6IHRva2VuTGlzdCkgewoJICAgICAgICBmb3IoU3RyaW5nIHQgOiB0b2tlbnMpIHsKCSAgICAgICAgCS8vIC4uLiBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIHJlc3VsdCBzZXQgaWYgd2UgZmFpbCB0byBmaW5kIGEgdG9rZW4KCSAgICAgICAgCWlmICghc3RyLmNvbnRhaW5zKHQpKSB7CgkgICAgICAgIAkJcmVzdWx0cy5yZW1vdmUoc3RyKTsKCSAgICAgICAgCQkKCSAgICAgICAgCQkvLyBubyBwb2ludCBpbiBjb250aW51aW5nIGZvciB0aGlzIHRva2VuCgkgICAgICAgIAkJYnJlYWs7CgkgICAgICAgIAl9CgkgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9CgogIAlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlMaXN0PFN0cmluZz4gdG9rZW5MaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CgkJdG9rZW5MaXN0LmFkZCgiSG93IG5vdyBhMSBjb3cuIik7CgkJdG9rZW5MaXN0LmFkZCgiVGhlIGIxIGhhcyBvZGRseS1zaGFwZWQgYTIuIik7CgkJdG9rZW5MaXN0LmFkZCgiSSBsaWtlIGEyISBiMiwgYjIsIGIyISIpOwoJCQoJCVRva2VuTWF0Y2hlciBtYXRjaGVyID0gbmV3IFRva2VuTWF0Y2hlcih0b2tlbkxpc3QpOwoJCQoJCUxpc3Q8U3RyaW5nPiByZXN1bHRzID0gbWF0Y2hlci5maW5kU2VudGVuY2VzV2l0aCgiYTEiKTsgICAgIC8vIFJldHVybnMgMSBTdHJpbmcgKCJIb3cgbm93IGExIGNvdyIpCgkJCgkJZm9yIChTdHJpbmcgciA6IHJlc3VsdHMpIHsKCQkJU3lzdGVtLm91dC5wcmludGxuKCIxIC0gcmVzdWx0OiAiICsgcik7CgkJfQoJCQoJCUxpc3Q8U3RyaW5nPiByZXN1bHRzMiA9IG1hdGNoZXIuZmluZFNlbnRlbmNlc1dpdGgoImIxIik7ICAgIC8vIFJldHVybnMgMSBTdHJpbmcgKCJUaGUgYjEgaGFzIG9kZGx5LXNoYXBlZCBhMi4iKQoJCQoJCWZvciAoU3RyaW5nIHIgOiByZXN1bHRzMikgewoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIjIgLSByZXN1bHQ6ICIgKyByKTsKCQl9CgkJCgkJTGlzdDxTdHJpbmc+IHJlc3VsdHMzID0gbWF0Y2hlci5maW5kU2VudGVuY2VzV2l0aCgiYTIiKTsgICAgLy8gUmV0dXJucyB0aGUgMiBTdHJpbmdzIHdpdGggYTIgaW4gdGhlbSBzaW5jZSAiYTIiIGlzIGFsbCB3ZSBjYXJlIGFib3V0Li4uCgkJCgkJZm9yIChTdHJpbmcgciA6IHJlc3VsdHMzKSB7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigiMyAtIHJlc3VsdDogIiArIHIpOwoJCX0JCQoJCQoJCUxpc3Q8U3RyaW5nPiByZXN1bHRzNCA9IG1hdGNoZXIuZmluZFNlbnRlbmNlc1dpdGgoImEyIiwgImIyIik7ICAvLyBSZXR1cm5zIDEgU3RyaW5nICgiSSBsaWtlIGEyISBiMiwgYjIsIGIyIS4iKSBiZWNhdXNlIHdlIGNhcmUgYWJvdXQgQk9USCB0b2tlbnMKCQkKCQlmb3IgKFN0cmluZyByIDogcmVzdWx0czQpIHsKCQkJU3lzdGVtLm91dC5wcmludGxuKCI0IC0gcmVzdWx0OiAiICsgcik7CgkJfQoJfQp9Cgo=