/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
Person[] p = new Person[3];
p[0] = new Person("AAA", "AAA", "AAA");
p[1] = new Person("BBB", "BBBD@A", "CCC");
p[2] = new Person("CCCA", "CCCD@", "CCC");
search("A", "name", 3, p);
search("D@", "phone", 3, p);
search("A", "anywhere", 3, p);
}
public static class Person {
this.name = name;
this.phone = phone;
this.direction = direction;
}
return name;
}
return phone;
}
public String getDirection
() { return direction;
}
}
public static interface Checker {
public boolean check
(Person p,
String searchString
); }
public static void search
(String searchString,
String type,
int numberOfContacts, Person
[] contacts
) { // Initialize variables for results
int found = 0;
int[] results = new int[numberOfContacts];
Checker c;
if (type.equals("name")) {
c = new Checker() {
public boolean check
(Person p,
String searchString
) { return p.getName().contains(searchString);
}
};
} else if (type.equals("phone")) {
c = new Checker() {
public boolean check
(Person p,
String searchString
) { return p.getPhone().contains(searchString);
}
};
} else {
c = new Checker() {
public boolean check
(Person p,
String searchString
) { return p.getPhone().contains(searchString) || p.getName().contains(searchString);
}
};
}
for (int x = 0; x < numberOfContacts; x++) {
if (c.check(contacts[x], searchString)) {
results[found] = x;
found++;
}
}
// Display the search results
System.
out.
println("\n\t**************"); System.
out.
println("\tSearch Results"); System.
out.
println("\t**************"); System.
out.
println("Found " + found
+ " results containing \"" + searchString
+ "\":");
if (found > 0) {
for (int x = 0; x < found; x++) {
System.
out.
println(contacts
[results
[x
]].
getName() + "\t" + contacts
[results
[x
]].
getPhone()); }
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCVBlcnNvbltdIHAgPSBuZXcgUGVyc29uWzNdOwoJCXBbMF0gPSBuZXcgUGVyc29uKCJBQUEiLCAiQUFBIiwgIkFBQSIpOwoJCXBbMV0gPSBuZXcgUGVyc29uKCJCQkIiLCAiQkJCREBBIiwgIkNDQyIpOwoJCXBbMl0gPSBuZXcgUGVyc29uKCJDQ0NBIiwgIkNDQ0RAIiwgIkNDQyIpOwoJCXNlYXJjaCgiQSIsICJuYW1lIiwgMywgcCk7CgkJc2VhcmNoKCJEQCIsICJwaG9uZSIsIDMsIHApOwoJCXNlYXJjaCgiQSIsICJhbnl3aGVyZSIsIDMsIHApOwoJfQoJCglwdWJsaWMgc3RhdGljIGNsYXNzIFBlcnNvbiB7CgkJU3RyaW5nIG5hbWU7CgkJU3RyaW5nIHBob25lOwoJCVN0cmluZyBkaXJlY3Rpb247CgkJcHVibGljIFBlcnNvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHBob25lLCBTdHJpbmcgZGlyZWN0aW9uKSB7CgkJCXRoaXMubmFtZSA9IG5hbWU7CgkJCXRoaXMucGhvbmUgPSBwaG9uZTsKCQkJdGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CgkJfQoJCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKCQkJcmV0dXJuIG5hbWU7CgkJfQoJCXB1YmxpYyBTdHJpbmcgZ2V0UGhvbmUoKSB7CgkJCXJldHVybiBwaG9uZTsKCQl9CgkJcHVibGljIFN0cmluZyBnZXREaXJlY3Rpb24oKSB7CgkJCXJldHVybiBkaXJlY3Rpb247CgkJfQoJfQoJCglwdWJsaWMgc3RhdGljIGludGVyZmFjZSBDaGVja2VyIHsKCQlwdWJsaWMgYm9vbGVhbiBjaGVjayhQZXJzb24gcCwgU3RyaW5nIHNlYXJjaFN0cmluZyk7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBzZWFyY2goU3RyaW5nIHNlYXJjaFN0cmluZywgU3RyaW5nIHR5cGUsIGludCBudW1iZXJPZkNvbnRhY3RzLCBQZXJzb25bXSBjb250YWN0cykgewogICAgLy8gSW5pdGlhbGl6ZSB2YXJpYWJsZXMgZm9yIHJlc3VsdHMKICAgIGludCBmb3VuZCA9IDA7CiAgICBpbnRbXSByZXN1bHRzID0gbmV3IGludFtudW1iZXJPZkNvbnRhY3RzXTsKICAgIAogICAgQ2hlY2tlciBjOwogICAgaWYgKHR5cGUuZXF1YWxzKCJuYW1lIikpIHsKICAgIAljID0gbmV3IENoZWNrZXIoKSB7CiAgICAJCXB1YmxpYyBib29sZWFuIGNoZWNrKFBlcnNvbiBwLCBTdHJpbmcgc2VhcmNoU3RyaW5nKSB7CiAgICAJCQlyZXR1cm4gcC5nZXROYW1lKCkuY29udGFpbnMoc2VhcmNoU3RyaW5nKTsKICAgIAkJfQogICAgCX07CiAgICB9IGVsc2UgaWYgKHR5cGUuZXF1YWxzKCJwaG9uZSIpKSB7CiAgICAJYyA9IG5ldyBDaGVja2VyKCkgewogICAgCQlwdWJsaWMgYm9vbGVhbiBjaGVjayhQZXJzb24gcCwgU3RyaW5nIHNlYXJjaFN0cmluZykgewogICAgCQkJcmV0dXJuIHAuZ2V0UGhvbmUoKS5jb250YWlucyhzZWFyY2hTdHJpbmcpOwogICAgCQl9CiAgICAJfTsKICAgIH0gZWxzZSB7CiAgICAJYyA9IG5ldyBDaGVja2VyKCkgewogICAgCQlwdWJsaWMgYm9vbGVhbiBjaGVjayhQZXJzb24gcCwgU3RyaW5nIHNlYXJjaFN0cmluZykgewogICAgCQkJcmV0dXJuIHAuZ2V0UGhvbmUoKS5jb250YWlucyhzZWFyY2hTdHJpbmcpIHx8IHAuZ2V0TmFtZSgpLmNvbnRhaW5zKHNlYXJjaFN0cmluZyk7CiAgICAJCX0KICAgIAl9OwogICAgfQoKICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtYmVyT2ZDb250YWN0czsgeCsrKSB7CiAgICAgICAgaWYgKGMuY2hlY2soY29udGFjdHNbeF0sIHNlYXJjaFN0cmluZykpIHsKICAgICAgICAgICAgcmVzdWx0c1tmb3VuZF0gPSB4OwogICAgICAgICAgICBmb3VuZCsrOwogICAgICAgIH0KICAgIH0KICAgCgogICAgLy8gRGlzcGxheSB0aGUgc2VhcmNoIHJlc3VsdHMKICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5cdCoqKioqKioqKioqKioqIik7CiAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlx0U2VhcmNoIFJlc3VsdHMiKTsKICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXHQqKioqKioqKioqKioqKiIpOwogICAgU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCAiICsgZm91bmQgKyAiIHJlc3VsdHMgY29udGFpbmluZyBcIiIgKyBzZWFyY2hTdHJpbmcgKyAiXCI6Iik7CiAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKCiAgICBpZiAoZm91bmQgPiAwKSB7CiAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBmb3VuZDsgeCsrKSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb250YWN0c1tyZXN1bHRzW3hdXS5nZXROYW1lKCkgKyAiXHQiICsgY29udGFjdHNbcmVzdWx0c1t4XV0uZ2V0UGhvbmUoKSk7CiAgICAgICAgfQogICAgfQoKICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5cblxuIik7Cn0KfQ==