我的输入文本文件是:-
kiShore,kUMar,bhAvanam
我的输出文件必须是:-
Kishore,Kumar,Reddy
简单地说,我的代码需要将文件中的第一个字母大写这是我的代码
public static void main(String[] args) throws Exception {
// write your code here
BufferedReader br = new BufferedReader(new FileReader("input.txt"));
FileWriter fw = new FileWriter("output.txt");
String line;
while ((line = br.readLine()) != null) {
String[] values = line.split(",");
for (String str : values) {
String msg = str.substring(0, 1).toUpperCase() + str.substring(1).toLowerCase();
br.mark(0);
if (br.read()!= -1)
{
msg=msg+",";
br.reset();
}
fw.write(msg);
}
}
fw.close();
br.close();
}
当文件包含多行时,我的代码工作得很好,比如:
kIshore,kUMar
rEdDy
我得到准确的输出
Kishore,Kumar,Reddy
但是如果我的输入文件只包含一行,比如:
kiShore,kUMar,bhAvanam
我得到了输出KishoreKumarBhavanam。如果输入文件只包含单行,我无法在单词之间插入逗号
预期结果:
Kishore,kumar,Bhavanam
实际结果:
KishoreKumarReddy
根据您的代码,问题是您只添加了逗号,而缓冲读取器可以读取下一个字符。但是,问题是,由于您已经读取了整行数据,因此没有其他数据需要读取。现在,由于没有可读取的内容,br.read()
函数调用将返回-1
,并且逗号不会添加到输出中。
对于多行文件,您可能也会观察到相同的行为,其中对于输入的最后一行,没有添加逗号。
要解决此问题,请使用br.read()
函数,在循环时使用索引并添加逗号,以防该项不是列表中的最后一个元素或使用StringJoiner
我想你可以这样做:
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.StringJoiner;
// ...
InputStream inputStream = ParseFile.class.getResourceAsStream("/input.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
FileWriter fw = new FileWriter("output.txt");
String line;
StringJoiner stringJoiner = new StringJoiner(",");
while ((line = br.readLine()) != null) {
String[] values = line.split(",");
for (String str : values) {
stringJoiner.add(str.trim());
}
}
fw.write(stringJoiner.toString());
fw.close();
br.close();