如何在很长的字符串中突出显示第一行不同的行?
How to highlight first different line in a quite long String?
我有几百行的用户可读文件。
每行都很短(~20-30 个符号)。
有时我需要用那个字符串对另一个字符串执行等于操作。
如果字符串不同,我需要找到不同的第一行。当然我可以手动完成:
在循环中找到第一个不同的字符,然后找到前面和后面的 '/n'
,但从我的角度来看,这段代码并不漂亮。
有没有其他方法可以使用一些外部库来实现它?
不需要任何图书馆,你问的很简单。但它足够独特,任何图书馆都不会拥有它,所以自己写吧。
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);
}
}
我有几百行的用户可读文件。 每行都很短(~20-30 个符号)。
有时我需要用那个字符串对另一个字符串执行等于操作。
如果字符串不同,我需要找到不同的第一行。当然我可以手动完成:
在循环中找到第一个不同的字符,然后找到前面和后面的 '/n'
,但从我的角度来看,这段代码并不漂亮。
有没有其他方法可以使用一些外部库来实现它?
不需要任何图书馆,你问的很简单。但它足够独特,任何图书馆都不会拥有它,所以自己写吧。
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);
}
}