Search code examples
javastringguavaapache-commons

How to highlight first different line in a quite long String?


I have user readable file with several hundreds rows. Each row is quite short(~20-30 symbols).

From time to time I need to execute equals operation with that string against another strings.

If Strings are different I need to find first row which differs. Sure I can do it manually:

in a loop find first character which differs then find previous and following '/n' but this code is not beaiful from my point of view.

Is there any other way to achieve it using some external libraries ?


Solution

  • There's no need for any library, what you ask is rather straightforward. But it's unique enough that no library would have it, so just write it yourself.

    import java.nio.file.Files;
    import java.util.*;
    
    ...
    
    Optional<String> findFirstDifferentLine(Path file, Collection<String> rows) throws IOException {
      try (var fileStream = Files.lines(file)) { // Need to close
        var fileIt = fileStream.iterator();
        var rowIt = rows.iterator();
        while (fileIt.hasNext() && rowIt.hasNext()) {
          var fileItem = fileIt.next();
          if (!Objects.equal(fileItem, rowIt.next()) {
            return Optional.of(fileItem);
          }
        }
        return Optional.of(fileIt)
            .filter(Iterator::hasNext)
            .map(Iterator::next);
      }
    }