番石榴,Files.readLines()和空白区域

我有以下代码使用Guava的Files.readLines()方法:

List strings = Lists.newArrayList(); final File file = new File(filePath); if (file.isFile()) { try { strings= Files.readLines(file, Charsets.UTF_8); } catch (IOException ioe) {} } else { // File does not exist } 

一旦我有了我的String列表,我想测试一下,看看我正在查看的当前字符串是否在文件中。

 String myString = "foo"; if (strings.contains(myString)) { // Do something } 

但是,我想使容忍原始文件的代码包含前导或尾随空格(即" foo " )。

实现这一目标的最优雅方式是什么?

我能想到的唯一替代tskuzzy方法的方法如下:

 List trimmedLines = Files.readLines(file, Charsets.UTF_8, new LineProcessor>() { List result = Lists.newArrayList(); public boolean processLine(String line) { result.add(line.trim()); } public List getResult() {return result;} }); 

您不必遍历整个文件(如果您只想知道行是否在文件中),请使用Files.readLines(File file, Charset charset, LineProcessor callback)

 public final class Test { /** * @param args * @throws IOException */ public static void main(final String[] args) throws IOException { test1("test"); } static void test1(final String lineToTest) throws IOException { final Boolean contains = Files.readLines(new File("test.txt"), Charsets.UTF_8, new LineProcessor() { Boolean containsGivenLine = false; @Override public Boolean getResult() { return containsGivenLine; } @Override public boolean processLine(final String line) throws IOException { if (line.trim().equals(lineToTest)) { containsGivenLine = true; return false; } else { return true; } } }); System.out.println("contains '" + lineToTest + "'? " + contains); } 

给定文件:

  test me if you want! 

它输出真实。

使用trim()方法,它删除前导和尾随空格。

 boolean contains = false; for(String s : strings) { if(s.trim().equals(myString)) { contains = true; break; } } if(contains) { // do something } 

如果您还想toLowerCase()区分大小写,那么您也可以使用toLowerCase()