hashmap不断重复前面的每个值selenium,java

zphenhs4  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(380)

我有一个url列表,在浏览器中打开每一行,然后将一些值收集到hashmap中。当我打印hashmap中收集的值时,我看到它重复前面的每个值。我做错什么了?
以下是url的外观:
https://myurl.com/test1111
https://myurl.com/test2222
https://myurl.com/test3333
https://myurl.com/test4444
https://myurl.com/test5555
下面是hashmap打印的样子:
test1111 |文件可用
test2222 |文件可用
test1111 |文件可用
test2222 |文件可用
test3333 |文件不可用
test1111 |文件可用
test2222 |文件可用
test4444 |文件可用
test3333 |文件不可用
test1111 |文件可用
test2222 |文件可用
test4444 |文件可用
test5555 |文件可用
test3333 |文件不可用
test1111 |文件可用
test2222 |文件可用
test4444 |文件可用
test5555 |文件可用
test6666 |文件可用
test3333 |文件不可用
test7777 |文件不可用
这是我的全部代码:

public class Access_file{   

    public static void readFile() throws IOException {
        HashMap<String, String> values = new HashMap<String, String>();
        CSVReader reader = null;        
        System.setProperty("webdriver.chrome.driver", "chromedriver");
        WebDriver driver = new ChromeDriver();

        try  {  
            reader = new CSVReader(new FileReader("x_url.csv"), ',');
            String[] nextLine;
            while((nextLine = reader.readNext()) != null) {
                for(String line : nextLine) {
                    driver.get(line);
                    String[] url_split = line.split("/");
                     String test_url = url_split[4];
                     String availability = driver.findElement(By.cssSelector("#mySelector']")).getText();
                     values.put(test_url, availability);                     
                 }  
                for(String i : values.keySet()) {
                     System.out.println(i + "|"+ values.get(i));
                 } 
        }                       
    }
        catch (NoSuchElementException e) {
            e.printStackTrace();
        }
        finally {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
zwghvu4y

zwghvu4y1#

问题不在于 HashMap :根据 Map 的合同中,每把钥匙只保留一份副本。
问题是打印Map时程序中的点:在不断向Map添加新条目的循环中执行。这就是为什么旧的条目会被打印多次。
移动 for 外环 while 循环以解决此问题。
在将来避免这些问题的一个非常有用的习惯就是保持你的压痕整洁。这样你会立刻看到你的 for 循环处于错误的嵌套级别,这将帮助您解决问题,甚至可以避免在一开始就引入它。

0lvr5msh

0lvr5msh2#

您有:

for(String i : values.keySet()) {
  System.out.println(i + "|" + values.get(i));
}

这似乎是一个for语句,用于实现您的输出所显示的功能:对于var的每个元素 values ,它正在打印数字、竖条和值。你每读一行就这么做。你期望它做什么而它不做?

相关问题