从文件读取时打印空格



我试图打印一个文件的内容,该文件是在用户从JChooser提示窗口中选择后使用while循环读取的。该文件写入程序中,包含ID、名、姓、头衔和出生年份,并以"000001bilbobagginsesq .1020"的格式存储在写入的数据文件中。我正在尝试使用另一个程序来选择数据文件,将内容打印到控制台,使其显示为:

000001          Bilbo              Baggins           Esq.          1020

我想使用printf语句来格式化读取和存储在"rec"中的数据。变量,但是当我从文件中传入数据时,它似乎忽略了printf格式,并在控制台中像这样打印数据:

1 000001BilboBagginsEsq.1020

我的程序使用JChooser选择一个文件并使用while循环打印其内容:

while(reader.ready())
{
rec = reader.readLine();
line++;                    
System.out.printf("n%4d %-60s ", line, rec);
}
reader.close();
System.out.println("nnData file read!"); 

如果有任何帮助,我将不胜感激。

我尝试使用printf格式化rec,期望输出显示:

000001          Bilbo              Baggins           Esq.          1020

但是它仍然打印:

1 000001BilboBagginsEsq.1020

字段没有分隔符。

文本000001BilboBagginsEsq.1020需要以某种方式分隔。

为了便于论证,我假设第一个字段是一个数字,第二个字段是一个单词,以大写字母开头,第三和第四个字段也是如此,第五个字段是一个数字。

你可以采用几种方法来完成这项任务。

我建议使用PatternMatcher来捕获这些值。
然后可以使用基本的class结构来保存每行的数据。

考虑下面的类。

class Entry {
String fieldA, firstName, secondName, title, fieldE;
static Entry parse(String string) {
Entry entry = new Entry();
String regex = "(\d+)([A-Z][a-z._]+)([A-Z][a-z._]+)([A-Z][a-z._]+)(\d+)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
if (matcher.find()) {
entry.fieldA = matcher.group(1);
entry.firstName = matcher.group(2);
entry.secondName = matcher.group(3);
entry.title = matcher.group(4);
entry.fieldE = matcher.group(5);
}
return entry;
}
@Override
public String toString() {
String string;
string = "%-15s".formatted(fieldA);
string += "%-15s".formatted(firstName);
string += "%-15s".formatted(secondName);
string += "%-15s".formatted(title);
string += "%s".formatted(fieldE);
return string;
}
}

parse方法是静态的,可以用来返回Entry的实例,给定行。
将使用toString方法将数据格式化为String,然后我们可以将其打印到标准输出中。

然后可以使用下面的方法逐行读取文件,并将数据打印出来。

void print(String path) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
Entry entry;
String line;
int count = 0;
while ((line = reader.readLine()) != null)
System.out.println(++count + " " + Entry.parse(line));
}
}

输出
1 000001         Bilbo          Baggins        Esq.           1020

相关内容

  • 没有找到相关文章

最新更新