我有一个带有这样的行的文件:
Adult literacy rate, population 15+ years, female (%),United Republic of Tanzania,2015,76.08978
Adult literacy rate, population 15+ years, female (%),Zimbabwe,2015,85.28513
Adult literacy rate, population 15+ years, male (%),Honduras,2014,87.39595
Adult literacy rate, population 15+ years, male (%),Honduras,2015,88.32135
如果我这样做:
try {
Stream<String> file = Files.lines(Paths.get("file.csv"));
file
.filter(r -> r.startsWith("f",43))
.forEach(r -> System.out.println(r));
file.close();
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
我得到女性。为什么这不起作用?
.map(row -> row.split(","))
.filter(r[2].startsWith("f"))
我可以这样打印r [2]
.forEach(r -> System.out.println(r[2]));
至少使r [2]存在。
您在逗号后有空格,因此split方法将返回以逗号开头的字符串。因此,您需要使用r.split[2].charAt(1) == 'f'
或r.split[2].startsWith(" f")
来说明该空间。
而且,正如Ousmane D.指出的那样,您不应该有.filter(r[2].startsWith("f")
,应该是.filter(
r-> r[2].startsWith(" f")
,但这可能只是一个错字
您应修剪索引2
处的元素以消除逗号(,
)后的空格,例如]
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
System.out.println(Stream
.of("Adult literacy rate, population 15+ years, female (%),United Republic of Tanzania,2015,76.08978",
"Adult literacy rate, population 15+ years, male (%),Honduras,2014,87.39595")
.filter(row -> row.split(",")[2].trim().startsWith("f"))
.collect(Collectors.toList()));
}
}
输出:
[Adult literacy rate, population 15+ years, female (%),United Republic of Tanzania,2015,76.08978]
此外,请注意,您不需要使用如上所示的.map
。