Найти конкретное слово в массиве предложений и вернуть предложения, содержащие слово - PullRequest
0 голосов
/ 25 апреля 2020

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

Пример строки журнала: 001 555 3334523 AppName 2341 Это сообщение. 001 1224 3334524443 AppSecond 2341 Это сообщение, бла 341 "" - *. 022201 55555 3333334523 AppThird 2341 Это еще одно сообщение. 0301 533555 3334523 AppName 2341 Это еще одно сообщение.

Мне нужно напечатать все строки, которые содержат AppName .

Это то, что я пробовал.

  public static void findArrayString(String[] input, String item)
  {
    for(int i = 0; i < input.length; i++)
     {

      List<String> chr = new ArrayList<>();
        chr = Arrays.asList(input[i]);

      if(chr.get(i).contains(item))
      {
        System.out.println(input[i]);
      }

    }
  }

  public static void main(String[] args) 
  {
    String[] str = {"001 555 3334523 AppName 2341 This is a message.",
                   "001 1224 3334524443 AppSecond 2341 This is a message blah 341-*.",
                   "022201 55555 3333334523 AppThird 2341 This is some other message.",
                    "0301 533555 3334523 AppName 2341 This is another message."};

    findArrayString(str,"AppName");

  }
}

My output is :

001 555 3334523 AppName 2341 This is a message.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
    at java.base/java.util.Arrays$ArrayList.get(Arrays.java:4351)
    at Solution.findArrayString(Solution.java:31)
    at Solution.main(Solution.java:47)

Может кто-нибудь сказать мне, где я иду не так?

Ответы [ 2 ]

1 голос
/ 25 апреля 2020
  List<String> chr = new ArrayList<>();
  chr = Arrays.asList(input[i]);

создает список с одним элементом. Но затем

if(chr.get(i).contains(item))

пытается найти i-й элемент chr. Поскольку существует только один элемент, исключение выдается, когда i> 0.

Промежуточный список не нужен - попробуйте что-то подобное в l oop:

  if(input[i].contains(item))
  {
    System.out.println(input[i]);
  }
0 голосов
/ 25 апреля 2020

Вы разбиваете абзац на предложения с одним для l oop, но чтобы разбить предложения на слова, вам нужно использовать другое для l oop, чтобы можно было сравнивать слова. Вот исправление необходимо в коде:

public static void findArrayString(String[] input, String item)
      {
        for(int i = 0; i < input.length; i++)
         {

          List<String> chr = new ArrayList<>();
            chr = Arrays.asList(input[i]);

            for(int j=0;j<chr.size();j++) {
                if(chr.get(j).contains(item))
              {
                System.out.println(input[i]);
              }
            }      
        }
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...