实际上,我正在尝试读取包含多行的文件。为此我使用scanner.nextline()
但是,我想读取直到跟随停止(点分隔符)的行,通常后跟空格或行尾char。
在这种情况下,任何人都可以帮助我吗?
答案 0 :(得分:1)
如果您想要搜索一段时间,可以Matcher
使用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"));
}
.*?
- .
将匹配任何内容。 *
匹配0次或更多次。 ?
是lazy匹配器。这匹配任何类型的任意数量的字符,但它在第一个句点和空格之前停止(因为惰性运算符)。 \\.
- 这匹配一段时间。在Java中,您必须双重转义正则表达式中的特殊字符。(\\s+)
- 这意味着匹配空格(\s
,其中包括新行)一次或多次。它匹配一个或多个空白字符。括号"捕获"正则表达式的这一部分,这样每次你在正则表达式上匹配时,你可以问它在括号内匹配了哪些特定部分。这可以让您知道它是空格还是换行符。 matcher.group()
获取刚刚匹配的字符串。
我在问号中添加并注释掉了其他模式,因为听起来你可能在某些数据中间有一段时间。问号是"懒惰"匹配。默认情况下,匹配是贪婪的,并且将采用最长的匹配字符串。因此,如果字符串中有多个位置,其中一个句点后跟一个空格,则它将返回所有这些作为一个匹配项。懒惰迫使它一旦到达第一个时间段和空间就停止匹配任何字符(。*)。
答案 1 :(得分:0)
使用read()方法并按char读取char。如果你匹配的话。这是你的换行符。
其他解决方案可能是设置换行符然后使用readline()。我没有尝试过这个
或一次读取文件使用string.split方法
答案 2 :(得分: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
}
答案 3 :(得分: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