java从指定行开始,从后往前找出最近的空行,用java
时间: 2023-06-12 10:01:53 浏览: 49
代码实现该功能
可以使用以下代码实现此功能:
```java
public static int findNearestEmptyLine(String text, int startLine) {
String[] lines = text.split("\\n");
int nearestEmptyLine = -1;
for (int i = startLine - 1; i >= 0; i--) {
String line = lines[i].trim();
if (line.isEmpty()) {
nearestEmptyLine = i + 1;
break;
}
}
return nearestEmptyLine;
}
```
其中,`text` 是要搜索的文本字符串,`startLine` 是搜索的起始行。该函数将返回距离 `startLine` 最近的空行的行数(如果找到的话),如果没有找到,则返回 -1。
该函数的实现过程是先将文本字符串按行分割成字符串数组,然后从起始行开始向上搜索,每次判断当前行是否为空行(去除行首行尾的空白字符),如果是则返回该行号(为了和人类的行号从 1 开始习惯保持一致,所以返回值需要加上 1),如果搜索到第一行仍未找到空行,则返回 -1。
相关问题
java从文件的指定行开始,从后往前找出最近的空行,用java
来实现如何?
可以使用Java中的RandomAccessFile类来实现这个功能。具体步骤如下:
1. 打开指定文件,创建RandomAccessFile对象。
2. 使用seek()方法定位到指定行位置,同时记录此位置。
3. 从此位置开始往前逐一读取每个字符,直到找到空行为止。
4. 如果一直找不到空行,一直往前读取到文件的开头。
5. 最后返回找到的空行位置即可。
下面是一个示例代码:
```java
import java.io.IOException;
import java.io.RandomAccessFile;
public class FindEmptyLine {
public static void main(String[] args) {
String filePath = "test.txt"; // 指定要查找的文件路径
int startLine = 10; // 指定要从文件的第几行开始查找
long position = -1; // 记录找到的空行位置,初始值为-1
try (RandomAccessFile raf = new RandomAccessFile(filePath, "r")) {
// 定位到指定行位置
long skipBytes = 0;
int currentLine = 1;
while (currentLine < startLine) {
if (raf.readLine() == null) {
break;
}
skipBytes = raf.getFilePointer();
currentLine++;
}
raf.seek(skipBytes);
// 从此位置开始往前逐一读取每个字符,直到找到空行为止
while (raf.getFilePointer() > 0) {
raf.seek(raf.getFilePointer() - 1);
char ch = (char) raf.readByte();
if (ch == '\n') {
position = raf.getFilePointer();
break;
}
}
// 如果一直找不到空行,一直往前读取到文件的开头
if (position == -1) {
raf.seek(0);
position = 0;
}
System.out.println("找到空行位置:" + position);
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
注意事项:
1. 代码中使用了try-with-resource语法来自动关闭RandomAccessFile对象。
2. 如果文件不存在或指定行超出文件实际行数,则会直接输出“找到空行位置:0”。
3. 如果在读取过程中产生了IOException异常,则会直接输出异常信息并结束程序。
bufferedReader.readLine()已经读到了中间的某一行,怎么找这一行的前后行最近的空行,用java实现
对于这个问题,可以使用一个while循环来读取每一行,再使用一个变量来记录上一行的内容。当读取到的行是空行时,就可以记录当前行的前一行和后一行了。具体实现代码如下:
```java
String line;
String prevLine = null;
String nextLine = null;
while ((line = bufferedReader.readLine()) != null) {
if (line.isEmpty()) {
nextLine = bufferedReader.readLine();
break;
}
if (prevLine != null && prevLine.isEmpty()) {
prevLine = line;
} else if (nextLine == null) {
prevLine = line;
}
}
System.out.println("前一行:" + prevLine);
System.out.println("后一行:" + nextLine);
```
注意,这里只计算了最近的空行,如果需要寻找所有空行的前后行,可以将上述代码放在一个循环中,每次找到空行后记录前后行并继续寻找下一个空行。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)