簡體   English   中英

在for-each循環Java中進行迭代

[英]Iterating in for-each loop Java

我有一個ArrayList,在其中搜索所需的元素,然后將其所需的部分添加到另一個ArrayList中。 問題是,如果我要繼續搜索單詞,不僅是一個單詞,我也不知道如何繼續遍歷循環中的元素。 使用迭代器,我將無法搜索所需的東西。

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
}

因此,就像我輸入“ hello”一樣,它將在文本文件中找到一個單詞“ greeting”。 如果我輸入“ awesome”,它將找到“ thanks”一詞,但是如果我輸入它們兩個,它將輸入一個空數組,就像什么也沒找到,而不是“ greeting,謝謝”

UPD:Reading()返回:

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; }

您應該使用一些特定的分隔符來分割輸入字符串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(, )分開打印。

所以對於Input: hello,awesome它將給出輸出為greeting, thanks

包含獲取完全匹配的內容,拆分文本並進行相應的匹配,將結果存儲在新數組列表中

如果您嘗試接受許多輸入,則需要在輸入&for循環周圍循環。

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

您可以創建另一個arraylist並將您的userinput值一個接一個地添加到該列表中。 您可以通過在每個循環的當前值之上為每個循環使用new來迭代此新創建的arraylist

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM