単なるアプローチ(これを行うには多くの方法があると思います):必要に応じString
て a に分割し、String[]
各単語を処理します:
String str = "Find me a christian male 28 years old from Brazil";
for(String s : str.split(" ")){ //splits your String using space char
processWord(s);
}
ビジネス ルールに基づいてキーワードであるかどうかを判断するには、どこprocessWord(s)
で何かを行う必要があります。s
編集:まあ、多くの人がこの答えが不十分だと考えているので、さらにヒントを追加します。
いくつかの検索条件を設定したクラスがあるとします (これらの条件に一致する人を取得したいと仮定します):
public class SearchCriteria {
public void setGender(String gender){...}
public void setCountry(String country){...}
public void setReligion(String religion){...}
...
public void setWatheverYouThinkIsImportant(String str){...}
}
@Sotirios が彼のコメントで指摘したように、一致する単語のプールが必要になる場合があります。List<String>
基本的な一致する単語で使用できるとしましょう:
List<String> gender = Arrays.asList(new String[]{"MALE","FEMALE","BOY","GIRL"...});
List<String> country = Arrays.asList(new String[]{"ALGERIA","ARGENTINA","AUSTRIA"...});
List<String> religion = Arrays.asList(new String[]{"CHRISTIAN","JEWISH","MUSLIM"...});
processWord(s)
ここで、少し変更します(このメソッドが上記のリストにアクセスできると仮定します)。
public void processWord(String word, SearchCriteria sc){
if(gender.contains(word.toUpperCase()){
sc.setGender(word.toUpperCase());
return;
}
if(country.contains(word.toUpperCase()){
sc.setCountry(word.toUpperCase());
return;
}
if(religion.contains(word.toUpperCase()){
sc.setReligion(word.toUpperCase());
return;
}
....
}
最後に、ユーザーの入力を処理する必要があります。
String usersInput = "Find me a christian girl 28 years old from Brazil"; //sorry I change "male" for "girl" but I like girls :P
SearchCriteria sc = new SearchCriteria();
for(String word : usersInput.split(" "){
processWord(word, sc);
}
// do something with your SearchCriteria object
確かに、あなたはこれをもっとうまくやることができます。これは単なるアプローチです。検索をより正確に行いたい場合は、レーベンシュタインの距離について読んでください。たとえば、誰かが「Brazil」の代わりに「Brasil」を入れたり、「christian」の代わりに「cristian」を入れたりすると役に立ちます。