Java代码中为何需判断line.indexOf('#') == 0?数据加载疑问
代码中
line.indexOf('#') == 0的作用解释 你在代码里看到的line.indexOf('#') == 0,核心作用是跳过以#开头的注释行,具体拆解如下:
- 方法逻辑:
line.indexOf('#')会返回字符#在当前行字符串里第一次出现的索引位置。如果返回值是0,说明这个字符是当前行的第一个字符(字符串索引从0开始计数)。 - 循环处理:代码里把这个判断和空行判断绑定,只要满足其中一个条件,就执行
continue跳过当前循环——也就是说,空行和以#开头的行都不会被解析成Film对象。 - 设计意义:虽然你当前的
filmovi.txt里没有注释行,但这个判断是为了让程序更健壮:后续如果要在文本文件里添加注释(比如说明字段含义、备注特定数据),直接写以#开头的行即可,程序会自动忽略这些行,不用修改代码逻辑。
举个实际例子,如果你的文本文件后续更新为:
# 电影数据列表 # 格式:ID;电影名称;时长(分钟) 1;The Shining;146 2;One Flew Over the Cuckoo's Nest;133 # 短电影分类 3;The Little Shop of Horrors;72
代码会自动跳过前两行和第四行注释,只处理有效数据行。
附上你提供的格式化后代码片段:
Path path = Paths.get(getClass().getClassLoader().getResource("filmovi.txt").toURI()); //path is content of filmovi.txt List<String> lines = Files.readAllLines(path, Charset.forName("UTF-8")); //I put that content in List for (String line : lines) { line = line.trim(); if (line.equals("") || line.indexOf('#') == 0) //why we check '#' continue; String[] tokens = line.split(";"); Long id = Long.parseLong(tokens[0]); String naziv = tokens[1]; int trajanje = Integer.parseInt(tokens[2]); filmovi.put(Long.parseLong(tokens[0]), new Film(id, naziv, trajanje)); if(nextId<id) nextId=id; }
内容的提问来源于stack exchange,提问作者VennaTT
相关产品推荐
相关产品推荐

