4

GuavaのFiles.readLines()メソッドを利用する次のコードがあります。

List<String> 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 myString = "foo";
if (strings.contains(myString)) {
  // Do something
}

ただし、元のファイルに耐性のあるコードに先頭または末尾のスペース(つまり)を含めたいと思います" foo "

これを達成するための最もエレガントな方法は何ですか?

4

3 に答える 3

6

私が考えることができるtskuzzyのアプローチの唯一の代替案は次のとおりです。

List<String> trimmedLines = Files.readLines(file, Charsets.UTF_8,
  new LineProcessor<List<String>>() {
    List<String> result = Lists.newArrayList();

    public boolean processLine(String line) {
      result.add(line.trim());
    }
    public List<String> getResult() {return result;}
  });
于 2012-06-13T14:52:46.973 に答える
3

ファイル全体を反復処理する必要はありません(行がファイル内にあるかどうかだけを知りたい場合)、を使用しますFiles.readLines(File file, Charset charset, LineProcessor<T> 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>() {
      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!

trueを出力します。

于 2012-06-13T14:54:00.383 に答える
2

trim()先頭と末尾の空白を削除するメソッドを使用します。

boolean contains = false;

for(String s : strings) {
    if(s.trim().equals(myString)) {
        contains = true;
        break;
    }
}

if(contains) {
    // do something
}

大文字と小文字を区別しない場合は、を使用することもできますtoLowerCase()

于 2012-06-13T14:32:01.920 に答える