Несколько совпадений строк и условий? - PullRequest
1 голос
/ 26 октября 2010

У меня есть программа, которая должна иметь возможность искать в ArrayList «книжных» объектов и решать, какие из них соответствуют заданным критериям.

Вы можете искать по Имени, Идентификационному номеру или Году публикации.Или просто любым из перечисленного.

В настоящее время я использую вложенные операторы if, где нулевое значение означает, что поле не было указано, и отображать все.

for(int x = 0; x<bookList.size(); x++)
{
    if(bookList.get(x).callNum.equals(callNum) || callNum == null)
    {
         if(bookList.get(x).title.equals(title) || title == null)
         {
             if((bookList.get(x).year>= startDate 
                 && bookList.get(x).year <= endDate) || timeFrame == null)
             {
                 bookList.get(x).ToString();
             }
         }
     }
 }

Единственное место, где у меня есть проблема, это переменная заголовка.Мне нужно, чтобы сделать сопоставление на уровне слов.Таким образом, если книга называется «Программирование на Java», а другая - «Объектно-ориентированное программирование на Java», то обе должны быть возвращены, когда поиск ищет «Java».Как я могу сделать это?

Я ценю любую помощь, спасибо за ваше время!

Ответы [ 5 ]

2 голосов
/ 26 октября 2010

Как насчет:

if (title == null || bookList.get(x).title.contains(title))

при условии, что bookList.get(x).title является строкой.

0 голосов
/ 26 октября 2010

String.indexOf (..) будет работать. Я хотел бы предположить, что вы, вероятно, также захотите toCowerCase () имена книг и критерии. Кроме того, вы заботитесь о заказе? Под этим я подразумеваю, должен ли поиск «Java Programming» совпадать с обоими заголовками выше, даже если во втором слова находятся в другом порядке, а «in» между ними? Если это так, вы хотите разделить ("\ s +") и искать каждое слово в отдельности.

0 голосов
/ 26 октября 2010

Используйте метод String.contains (pattern) в ваших условиях: например.booktitle.contains ( "Java");

0 голосов
/ 26 октября 2010

Прежде всего, извлеките выражение bookList.get (x) в локальную переменную, чтобы вам не пришлось повторять его несколько раз в ваших условиях.

Вы можете использовать соответствующую подстроку, используя name.indexOf ("Java")> - 1 или name.contains ("Java")

0 голосов
/ 26 октября 2010

String.indexOf () - это простой способ.

String s1 = "a b c";
s1.indexOf("b")

вернет 2 (я думаю).Если вы попробуете с «x», он вернет -1, потому что он не был найден.Проверьте API на http://download.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf(java.lang.String)

регулярное выражение может быть лучшим способом.

Как примечание, 4 уровня вложенности сбивают с толку, и их следует избегать, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...