Java 读取行直到 followstop

标签 java java.util.scanner

实际上,我正在尝试读取包含多行的文件。为此我使用scanner.nextline()

但是,我想读取该行直到followstop(点分隔符),通常后面跟着空格或行尾字符。

在这种情况下有人可以帮助我吗?

最佳答案

如果您想搜索直到某个句点,您可以将 MatcherPattern 结合使用。

//Pattern p = Pattern.compile("[^\\.]*\\.(\\s+)"); 
Pattern p = Pattern.compile(".*?\\.(\\s+)");  //Anything any amount of times, 
                                              //followed by a dot and then some whitespace.

Matcher matcher = p.matcher("firstword. secondword.\n");

while(matcher.find()){
    boolean space = matcher.group(1).charAt(0) == ' ';
    System.out.println(matcher.start() + matcher.group() + "and is space: " + (space ? "TRUE" : "FALSE"));
}
  1. .*? - . 将匹配任何内容。 * 匹配 0 次或多次。 ?lazy匹配器。它匹配任何类型的任意数量的字符,但它在第一个句点和空格之前停止(因为惰性运算符)。
  2. \\. - 匹配句点。在 Java 中,您必须对正则表达式中的特殊字符进行双重转义。
  3. (\\s+) - 这意味着匹配空格(\s,其中包括换行符)一次或多次。它匹配一个或多个空白字符。括号“捕获”正则表达式的这一部分,以便每次在正则表达式上获得匹配项时,您都可以询问它括号内匹配的特定部分。这可以让您知道它是空格还是换行符。

matcher.group() 获取刚刚匹配的字符串。

我添加了问号并注释掉了其他模式,因为听起来您的某些数据中间可能有一个句点。问号进行“惰性”匹配。默认情况下,匹配是贪婪的,将采用最长的匹配字符串。因此,如果字符串中有多个位置有句点后跟空格,它将返回所有这些作为一个匹配项。一旦到达第一个句点和空格,惰性就会迫使它停止匹配任何字符 (.*)。

关于Java 读取行直到 followstop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19397840/

相关文章:

java - 存储输入的详细信息并显示每个新输入的所有详细信息。 ( java )

java - 扫描仪正则表达式分隔符问题

Java - 如何读取文件的整数或 double / float

c# - 通过网络将压缩数据从 C# 发送到 Java

java - 关于System.in和stream的问题

java - 在 Tomcat 从 SESSIONS.ser 反序列化后,你如何依赖注入(inject)标记为 @Configurable 的 bean?

java - 映射到 com.vividsolutions.jts.geom.Point 无效的字节序标志

java - 扫描仪只读取文件名,没有别的

java 正则表达式 url 解析

java - 解释以下正则表达式