【发布时间】:2018-03-09 11:54:20
【问题描述】:
我尝试编写一个 Java 程序,分别计算每行中以大写字母开头的单词数,就像在 txt 文件中一样,并且 在该行中以大写字母开头的单词数旁边打印行号.
我只提出了如何使用以下方法计算单行的数字:
Scanner in = new Scanner(System.in);
String s = new String();
System.out.println("Enter a line:");
s = " " + in .nextLine();
char ch;
int count = 0;
for (int i = 1; i < s.length(); i++) {
ch = s.charAt(i);
if (Character.isUpperCase(ch) && (i == 0 || Character.isWhitespace(s.charAt(i - 1)))) {
count++;
}
}
System.out.println("total number of words start with capital letters are :" + count);
我尝试按照我想要的方式进行操作,但它一直显示“文件为空”:
FileInputStream in = new FileInputStream("io-02.txt");
Scanner inScanner = new Scanner(in);
FileOutputStream out = new FileOutputStream("io-02-out.txt");
PrintWriter pwr = new PrintWriter(out);
int linenumb=0;
String s="";
char c;
int count = 0;
inScanner.useDelimiter("");
for (int i = 1; i < s.length(); i++) {
s = " " + inScanner.nextLine().trim();
c = s.charAt(i);
if (Character.isUpperCase(c) && (i == 0 || Character.isWhitespace(s.charAt(i - 1)))) {
count++;
} else if(s == "\n"){
if(linenumb == 0)
pwr.printf("%6s%35s%n", "Line#", "Number of Uppercase characters");
linenumb++;
pwr.printf("%5d.%35d%n", linenumb, count);
count = 0;
}
}
if(linenumb == 0)
System.out.println("Error: The input file is empty");
else{
linenumb++;
pwr.printf("%5d.%35d%n", linenumb, count);
System.out.println("The file output.txt has been created . . . ");
}
请帮忙。
【问题讨论】:
-
是什么阻止你为多行做同样的事情?您是否有循环问题,从文件中读取?对问题的总体理解?其他原因?
-
我在读取文件时遇到问题。我已经尝试过,但它不起作用,可能是因为我对 IO 不太了解。
-
好的,但是您应该向我们展示导致问题的代码(从文件中读取的位置),并说明您的问题。什么不起作用,以及为什么您认为它应该起作用。我们不会为您编写程序,但会帮助您解决问题。因此,请编辑您的问题,以便我们查看实际问题。
-
现在添加代码。
-
您需要将此行移到循环之前:s = " " + inScanner.nextLine().trim();。这会读取文件,因此您正在循环初始化值 (String s = "")