迭代for-each循环Java

时间:2016-11-07 13:56:07

标签: java arrays arraylist foreach

我有一个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
}

所以,就好像我输入&#34;你好&#34;,它会找到我在文本文件中的一个synonim这个词&#34; greeting&#34;如果我输入&#34; awesome&#34;,它会找到单词&#34; thanks&#34 ;,但是如果我输入它们两个,它将输入一个空数组,就像找不到任何内容而不是&#34;问候,谢谢&#34;

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

包含您完全匹配的提取,拆分文本并相应匹配,将结果存储在新数组列表中

答案 2 :(得分:1)

如果您尝试接受许多输入,则需要循环输入和输入。 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

答案 3 :(得分:1)

您可以创建另一个arraylist并将 userinput 值逐个添加到该列表中。您可以在每个循环的当前顶部使用新的为每个循环来迭代此新创建的arraylist