我编写的函数有:file-path和number作为参数。 函数打开此文件并从中获取每个第n行,将其反转并打印到控制台。
到目前为止,我设法做了类似的事情:
public static void reverseText(String filePath, int colle) // int colle = n-th line
{
BufferedReader fileRead = null;
String line;
try
{
File file = new File(filePath);
if (!(file.exists()))
file.createNewFile();
fileRead = new BufferedReader(new FileReader(file));
while ((line = fileRead.readLine()) != null)
{
}
fileRead.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
我的意思是在文件中例如是跟随文本行(int colle = 2,所以我们得到每个第二行表单文件)
first line
second line
< - 这个
third line
fourth line
< - 和此
(读取文件并反向获取行) - >输出打印在控制台中:
" enil dnoces" " enil htruof"
我想反过来我应该使用StringBuilder,但首先我需要获取这些行,我不知道如何读取每一行...
感谢您的帮助!
答案 0 :(得分:1)
下面的解决方案读取所有行,然后选择每个n行,反向和打印。
public static void main(String[] args) throws IOException {
int frequency = 5;
final List<String> strings = Files.readAllLines(Paths.get("/home/test.txt"));
List<String> collect = IntStream.range(0, strings.size())
.filter(c -> c % frequency == 0)
.mapToObj(c -> strings.get(c))
.collect(Collectors.toList());
collect.forEach(str ->
System.out.println(new StringBuilder(str).reverse())
);
}
IntStream是从集合字符串中获取特定行所必需的。 然后将一条一条线反转并打印。它可以是一个班轮,但决定让它更具可读性。
答案 1 :(得分:0)
使用行计数器来控制循环迭代:
int n = 3;
StringBuilder sb = new StringBuilder();
for (int i = 0; (line = fileRead.readLine()) != null; i++) {
if (i % n == 0) {
sb.delete(0, line.length())
System.out.println(sb.append(line).reverse());
}
}
您仍然可以使用while
为此定义变量。
答案 2 :(得分:0)
感谢大家的帮助。下面我发布了我期望的工作代码
public static void reverseText(String filePath, int colle)
{
BufferedReader fileRead = null;
StringBuilder builder = new StringBuilder();
int lineCounter = 0;
String line;
try
{
File file = new File(filePath);
if (!(file.exists()))
file.createNewFile();
fileRead = new BufferedReader(new FileReader(file));
while ((line = fileRead.readLine()) != null)
{
lineCounter++;
if (lineCounter %colle == 0)
{
builder.delete(0, line.length());
System.out.println(builder.append(line).reverse());
}
}
fileRead.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}