0

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

但是,我想阅读该行,直到通常后跟空格或行尾字符的 followtop(点分隔符)。

在这种情况下,任何人都可以帮助我吗?

4

4 回答 4

1

如果要搜索直到某个句点,可以使用 aMatcher和 a Pattern

//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 次或多次。?惰性匹配器。这匹配任意数量的任意类型的字符,但它在第一个句点和空格之前停止(因为惰性运算符)。
  2. \\.- 这匹配一个句点。在 Java 中,您必须对正则表达式中的特殊字符进行双重转义。
  3. (\\s+)- 这意味着匹配空格(\s,包括新行)一次或多次。它匹配一个或多个空白字符。括号“捕获”正则表达式的这一部分,因此每次您在正则表达式上获得匹配时,您只需询问括号内匹配的特定部分。这让您知道它是空格还是换行符。

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

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

于 2013-10-16T07:58:48.350 回答
0

尝试这个,

        StringBuilder stringBuilder = new StringBuilder();
        while ((line = bufferedReader.readLine()) != null)
        {
            if (line.contains(". ") || line.trim().endsWith("."))
            {
                int length = line.indexOf(". "); // get the index when the line contains dot and space in the middle
                stringBuilder.append(line.trim().endsWith(".") ? line
                        : line.substring(0, length).replace(". ", "." + System.getProperty("line.separator"))); // when the line contains dot at the end or the line may contain the dot with space
                System.out.println("stringBuilder : " + stringBuilder.toString());
                stringBuilder.delete(0, stringBuilder.toString().length());
                if (length != 0)
                {
                    stringBuilder.append(line.substring(length+2, line.length()));
                }
            }
            else
            {
                stringBuilder.append(line.replace(System.getProperty("line.separator"), " "));
            }
        }
        System.out.println("stringBuilder : "+stringBuilder.toString()); // when the last line not end with dot or not contain dot and space
于 2013-10-16T08:05:53.813 回答
0

使用 read() 方法并逐个字符地读取字符。如果您匹配 . 这是你的换行符。

其他解决方案可能是设置换行符,然后使用 readline()。但是我没有尝试过

或一次读取文件并使用 string.split 方法

于 2013-10-16T07:55:44.603 回答
0
FileReader fin = new FileReader("yourfile.txt");
Scanner src = new Scanner(fin);
// Set delimiters to full stop

src.useDelimiter(".");


while (src.hasNext()) {
  // do what you want here
  } 
于 2013-10-16T07:57:06.410 回答