2014-10-13 1 views
0

Мне нужно выполнить поиск и распечатку ключевых слов, если это правда. отлично работает, если сравнивать на порядок. но я хочу сравнитькак искать ключевые слова в строках

сравнить следующие случаи и ожидать, что они будут правдой.

сделать некоторые программирования Java = True

некоторые ява = истинный

сделать программирование = истина

и, наконец, самое главное

программирования Java = истина

программирования Java некоторые делают = true

Мне нужно вернуться справедливо для всех случаев, упомянутых выше, но до сих пор она работает только для случая 1 и 2

public class Examples { 

    public static void main(String[] args) { 
     String[] given = new String[20]; 
     given[0] = ("do some java programming"); 
     given[1] = ("do some grocery shopping"); 
     given[2] = ("play soccer at the west field"); 
     String input = new String(); 
     Scanner userInput = new Scanner(System.in); 

     System.out.println("Enter the string to compare"); 
     input[0] = userInput.nextLine(); 
     for (int i=0; i <20; i++){ 
     if(given[i].contains(input)) 
     { 
      System.out.println(given[i]); 
     } 
     else 
     { 
      //do nothing 
     } 
     } 
    } 
} 
+0

Вы открыты для других решений, которые чище ваших? как swtich stetment –

+0

да я, а также мне нужно отредактировать свой вход. Это строковый нестроковый массив. – Omer

ответ

0

Для этого Regex будет вашим другом.

Вот некоторые рабочий код, чтобы играть с:

String[] matches = input[0].split(" ");   
for (int i=0; i <3; i++){ 
    for(String s: matches){ 
    if(given[i].contains(s)) 
     System.out.println(given[i]); 
     break; 
    }  
    } 
} 
+0

Большое спасибо за ваш вклад! Это действительно помогло мне получить то, что я хочу намного легче. Плюс благодаря всем остальным за их вклад, они также были полезны – Omer

+0

С удовольствием помогаем и приветствуем StackOverflow! Не забудьте поднять хорошие ответы и проверить ответ, который вы нашли наиболее полезным :) – Kat

-1

Modify, как показано ниже при условии, все остальное прекрасно

//here initialize 'given' array 
//get the user input in a string that is 'input[0]' in your case 
int count = 0; 
for (String s : given) { 
    if (s != null && s.matches(input[0])) { 
     //it matches and print it 
    } else { 
     //either it's not a match or the 'given' array has a null at this index 
    } 
    count++; 
} 

Я должен сказать, что получить пользовательский ввод в строке. Я не понимаю, почему у вас это есть в массиве input.

0

Наброски один из способов решить эту проблему:

Каждая строка в given должны быть преобразованы в Set<String>, который является множество всех слов в строке. Используйте split() на каждой строке, чтобы получить слова, затем перейдите по списку слов и добавьте каждое слово в Set.

Для каждой строки ввода, используйте split() разбить его на слова, а затем создать любую коллекцию (Set<String> будет работать, но и создание List<String> с помощью Arrays.asList тоже работает.

Вы можете увидеть, если коллекция слова из ввода является подмножеством множества слов в каждой строке given с помощью метода containsAllSet «s.

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

+0

Почему бы не использовать инструкцию Switch, которая будет чище? –

+0

Сколько ящиков коммутаторов мне нужно сделать ?? – Omer

+0

@ajb Я не знаю, будет ли преобразование набора данных работать для списка объектов массива. Я с нетерпением жду большего задания, в котором я храню объекты в массивеList и поиск заголовка, который является мгновенной переменной для класса и печатает все объекты, которые соответствуют ключевому слову для заголовка. – Omer

0

Разделите данные строки и сохраните их в списке.
Снова разделите входную линию и сравните слово за словом.
Ниже приведен фрагмент кода

public class StringCompare 
 
{ 
 
    public static final String delimiter = " "; 
 

 
    public static void main(String[] args) 
 
    { 
 
     String[] given = new String[20]; 
 
     given[ 0 ] = ("do some java programming"); 
 
     given[ 1 ] = ("do some grocery shopping"); 
 
     given[ 2 ] = ("play soccer at the west field"); 
 

 
     List< List<String>> listLineAsWords = new ArrayList< List<String>>(); 
 
     
 
     //split each line and store it as list. 
 
     for (String line : given) 
 
     { 
 
      if (line == null) 
 
       break; 
 
      listLineAsWords.add(Arrays.asList(line.split(delimiter))); 
 
     } 
 

 
     
 
     //Write your own logic to get the input line 
 
     String inputLine = "programming java"; 
 
     if (compareLine(inputLine, listLineAsWords)) 
 
      System.out.println("The input line is part of given lines"); 
 
    } 
 

 
    private static boolean compareLine(String inputLine, List< List<String>> listLineAsWords) 
 
    { 
 
     if (inputLine == null) 
 
      return false; 
 
     List<String> words = Arrays.asList(inputLine.split(delimiter)); 
 
     for (List<String> listOfWords : listLineAsWords) 
 
     { 
 
      boolean isPartOfLine = true; 
 
      for (String word : words) 
 
      { 
 
       if (!listOfWords.contains(word)) 
 
       { 
 
        isPartOfLine = false; 
 
        break; 
 
       } 
 
      } 
 
      if(isPartOfLine) 
 
       return true; 
 
     } 
 
     return false; 
 
    } 
 
}

+0

Большое спасибо. Я уверен, что это сработает для меня. – Omer

+0

Я только начал вносить вклад в StackOverFlow, поэтому upvote будет замечательным. @Omer –

0

Ваш код почти сразу, но он нуждается в некоторые изменения

Первые, так как в вашем примере кода вы имеете 3 случай, это лучше всего определить ваш размер длиной 3.

String[] given = new String[3]; 

Примечание: для большего количества случаев вы можете определить большую длину массива; например, если вы добавите другие 2 случая, длина вашего массива равна 5

Для всех типов ссылок значение по умолчанию равно null, если длина массива больше, чем вам нужно.

read more about it here

Второй, в вашем случае заявления, вы хотите проверить, если вход содержит данный элемент массива или не

if (input.contains(given[i])) { 

код:

String[] given = new String[3]; 
    given[0] = ("do some java programming"); 
    given[1] = ("do some grocery shopping"); 
    given[2] = ("play soccer at the west field"); 

    Scanner userInput = new Scanner(System.in); 

    System.out.println("Enter the string to compare"); 
    String input = userInput.nextLine(); 

    for (int i = 0; i < given.length; i++) { 
     if (input.contains(given[i])) { 
      System.out.println(given[i]); 
     } else { 
      // System.out.println("do nothing"); 
     } 
    } 

выход:

enter image description here