2015-04-29 5 views
0

У меня есть набор ключевых слов, и у меня есть одна строка, которая содержит экземпляры ключевых слов, разделенные символом '/'. например «Пища» или «Автомобиль» - это ключевые слова и «/ еда/овсянка/фрукты», «/ tire/car/wheel» - это струны. Общее количество ключевых слов - 5500. Мне нужно отметить эту строку «подходящей», если в ней есть хотя бы один из 5550 ключевых слов. Один из способов, который я могу сделать, - загрузить все 5500 ключевых слов в hashSet и разделить String на токены и проверить, содержит ли hashSet каждый из токенов. Если найти совпадение, я отмечаю, что String «имеет право».HashSet содержит

Производительность разумная, может ли быть лучшее решение?

+0

У вас есть код, чтобы показать нам ,? –

+0

Я собираюсь написать код, но просто хотел сделать это с наилучшим подходом. Разве не ясно, в чем вопрос, о котором я думаю? Если нет, я могу объяснить это лучшим образом. – Kaunteya

+0

Вы пишете «общее количество строк в строке 1. Мне нужно отметить эту строку« подходящей », если она содержит хотя бы одно из 5550 ключевых слов в ней». Вы говорите об одной и той же строке здесь? –

ответ

0

Упрощенное решением для маркеров согласования может быть

public class REPL { 

    private static final HashSet<String> keyWords = new HashSet<>(); 

    public static void main(String[] args) { 
     keyWords.add("food"); 
     keyWords.add("car"); 

     String[] strings = { 
      "/food/oatmeal/fruits", 
      "/tyre/car/wheel", 
      "/steel/nuts/bolts", 
      "/cart/handle/grill" 
     }; 

     for (String s : strings) { 
      System.out.printf("string: %-20s ", s); 
      if (isEligible(s)) { 
       System.out.println("eligible: true"); 
      } else { 
       System.out.println("eligible: false"); 
      } 
     } 
    } 

    private static boolean isEligible(String s) { 
     StringTokenizer st = new StringTokenizer(s, "/"); 
     while (st.hasMoreTokens()) { 
      if (keyWords.contains(st.nextToken())) { 
       return true; 
      } 
     } 
     return false; 
    } 
} 
Смежные вопросы