【问题标题】:Iterating in for-each loop Java在for-each循环Java中迭代
【发布时间】:2016-11-07 13:56:07
【问题描述】:

我有一个 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, Thanks”一样

更新: 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; }

【问题讨论】:

  • 请显示 Reading() 返回的内容以及您希望 rewrite 包含的内容
  • with your statements //在这里我必须做类似word.next的事情,你不要#t next to do next,因为for循环遍历了word中的所有元素
  • 您能否提供更多关于您正在阅读的数据以及 Chat() 和 Reading() 返回的数据的详细信息。
  • @cricket_007 完成
  • 每次调用FindWord() 方法只接受一个用户输入,而不是多个输入。这就是你想问的吗?因为for(String elmt:word) 已经在遍历所有元素。打印出来,你会看到的

标签: java arrays arraylist foreach


【解决方案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

【讨论】:

  • 是的,我也打算发布 HashMap 是更好的方法来做到这一点。
  • @cricket_007 有什么东西可以防止双重搜索吗?我的意思是在寻找“好”这个词时,它发现它既是“伟大”的同义词,又是“早上好”的同义词?反之亦然。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    您可以创建另一个数组列表并将您的 userinput 值一个一个添加到该列表中。您可以在当前的 for each loop 之上使用 new for each loop 来迭代这个 新创建的 arraylist。

    【讨论】:

      【解决方案4】:

      你应该用一些特定的分隔符分割输入字符串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(",") 分开,因为您在 cmets 中描述了您使用空格作为分隔符的问题。

      打印ArrayList时,Automatically Output会与comma(, )分开打印。

      所以对于输入:hello,awesome 它将输出为greeting, thanks。

      【讨论】:

      • 有什么可以防止双重搜索的吗?我的意思是在寻找“好”这个词时,它发现它既是“伟大”的同义词,又是“早上好”的同义词?反之亦然。
      • 我没有得到你的问题。尝试用更好的例子来改写它。@VladDemyan
      • 所以,整个单词可以是另一个短语的一部分。例如单词“What”在我的文件中是“question”的同义词,但同时它也是一个短语的一部分短语“What is up”,实际上是同一文件中的“问候”。当我输入短语时,会发现它既是问题又是问候。所以看起来字符串输入不是每次都可以正常工作@Sanket Makani
      • 然后将输入作为What,What is up(逗号分隔)并将分隔符从" "更改为","。我正在编辑我的答案检查它。@VladDemyan
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      相关资源
      最近更新 更多