2016-11-07 2 views
0

У меня есть ArrayList, где я ищу нужный элемент, а затем добавляю его часть в другой ArrayList. Проблема в том, что если я хочу продолжать поиск слов, а не только одного слова, я не знаю, как продолжать элементы через цикл. С использованием итератора я не смог бы найти нужные вещи.Итерация для каждого цикла Java

public static ArrayList<String> FindWord(){ 
ArrayList<String> rewrite=new ArrayList<>();// 
    ArrayList<String> word=Reading();// rewrites the data from one string to other 
    String userinput=Chat(); 
    for(String elmt:word){ 
     if (elmt.contains(userinput) && elmt.contains("=")) { 
       String[] parts=elmt.split("\\="); 
       rewrite.add(parts[1]); 
      // here I must do something like word.next 
    } 

    } 
    System.out.println(rewrite); 
    return rewrite; // RETURNS THE SYNONIM OF THE WORD 
} 

Таким образом, он идет, если я вход «привет», он найдет мне слово «приветствие», которое является синонимом в моем текстовом файле. Если я буду вводить «awesome», он найдет слово «спасибо», но если я введу их оба, он будет вводить пустой массив, как будто ничего не найдено вместо «приветствия, спасибо»

UPD: Чтение() возвращает:

public static ArrayList<String> Reading() { 
    Scanner inputreader = null; 
    try { 
     inputreader = new Scanner(new FileInputStream("D:\\sinonims.txt")); 
    }catch (FileNotFoundException e1) {    // OPENS FILE WITH SINONIMS 
     e1.printStackTrace(); 
     System.out.println("File not found"); 
     System.exit(0); 
    } 
    ArrayList<String> Sins=new ArrayList(); 
    while(inputreader.hasNextLine()){ 
     String l=inputreader.nextLine(); 
     Sins.add(l); // REWRITES DATA FROM FILE TO ARRATLIST 
    } 
    inputreader.close(); 
    System.out.print(Sins); 
    return Sins; 
} 

public static String Chat(){ System.out.println("Let's start talking."); Scanner in=new Scanner(System.in); String line=in.nextLine(); return line; }

+0

Пожалуйста, покажите, что 'Reading()' возвращает и что вы хотите 'rewrite' содержать –

+0

с вашими утверждениями // здесь я должен сделать что-то вроде слова.Далее, вы не хотите делать следующее, потому что цикл for проходит через все элементы в слове –

+0

, вы можете предоставить более подробную информацию о данных, которые вы читаете, и о том, как возвращаются функции Chat() и Reading(). –

ответ

1

Если вы пытаетесь принять множество входов, вам нужно петля вокруг входа & для цикла.

Цикл for уже охватывает все слова.

Примечания: я заменил contains для startsWith, чтобы помешать вам ловить слово на другой стороне равенства

static ArrayList<String> word=Reading(); 

public static ArrayList<String> FindWord(){ 
    ArrayList<String> rewrite=new ArrayList<>(); 
    String userinput = "" ; 
    while (true) { 
     userinput=Chat(); 
     if (userinput.equals("quit")) break; 
     for(String elmt:word){ 
      if (elmt.startsWith(userinput) && elmt.contains("=")) { 
       String[] parts=elmt.split("\\="); 
       rewrite.add(parts[1]); 
      } 
    } 
    System.out.println(rewrite); 
    return rewrite; // RETURNS THE SYNONIM OF THE WORD 
} 

Я не могу сказать, что это лучший способ приблизиться к вашим проблемам, потому что вам кажется нужен Hashmap, а не Arraylist

+0

Да, я также был назначен для публикации с правлением, который лучше одобряет HashMap это сделать. –

+0

@ cricket_007 Есть ли что-то, чтобы предотвратить двойной поиск? Я имею в виду, глядя на слово «хорошо», он находит его как синоним «великого», так и синоним «доброго утра» и наоборот. –

1

Вы должны разделить строку ввода userinput с некоторым определенным разделителем.

Затем для каждого слова перейдите через разделенный массив и укажите каждое слово как input, найдите его синоним с вашей техникой и добавьте его в arraylist.

Это может быть выполнено путем внесения некоторых изменений в ваш код.

public static ArrayList<String> FindWord() 
{ 
    ArrayList<String> rewrite=new ArrayList<>(); 
    ArrayList<String> word=Reading(); 
    String userinput=Chat(); 
    String inputs[]=userinput.split(","); //Considering delimiter is comma(",") in user input 

    for(String input : inputs) //Giving each word as input at a time and search for it in word String 
    { 
     for(String elmt:word) 
     { 
      if (elmt.contains(input) && elmt.contains("=")) 
      { 
        String[] parts=elmt.split("\\="); 
        rewrite.add(parts[1]); 
      } 
     } 
    } 
    System.out.println(rewrite); 
    return rewrite; // RETURNS THE SYNONIM OF THE WORD 
} 

Так вот я рассматриваю, что вход с ограничителем Comma(",") поэтому я расщепляется строка ввода с Comma(",") как вы дали описание в комментариях о вашей проблеме с пространством в качестве разделителя.

Когда вы напечатаете ArrayList, автоматический вывод будет напечатан в отдельном виде с помощью comma(,).

Для ввода: hello,awesome Он выдаст результат как greeting, thanks.

+0

Есть ли что-то, чтобы предотвратить двойной поиск? Я имею в виду, глядя на слово «хорошо», он находит это как синоним «великого» и как синоним «доброго утра», и наоборот: –

+0

есть ли у вас какие-либо идеи, как решить эту проблему? –

+0

Я didn ' @ VladDemyan –

1

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

1

вы можете создать еще один arraylist и добавить свой userinput значения по одному в этот список. вы можете повторить этот созданный arraylist, используя новый для каждого цикла поверх тока для каждого цикла.

Смежные вопросы