Java 计算字符串的字母(大写和小写)
我这里有一个程序,它输入一个段落并将其写入一个文件。之后,它应该统计每个字母的出现次数(区分大小写)。但是,它不计算字母出现的次数。我想我把Java 计算字符串的字母(大写和小写),java,file-io,for-loop,Java,File Io,For Loop,我这里有一个程序,它输入一个段落并将其写入一个文件。之后,它应该统计每个字母的出现次数(区分大小写)。但是,它不计算字母出现的次数。我想我把for循环放错地方了 import java.io.*; import java.util.*; public class Exercise1 { public static int countLetters (String line, char alphabet) { int count = 0; for (int
for
循环放错地方了
import java.io.*;
import java.util.*;
public class Exercise1 {
public static int countLetters (String line, char alphabet) {
int count = 0;
for (int i = 0; i <= line.length()-1; i++) {
if (line.charAt(i) == alphabet)
count++;
}
return count;
}
public static void main(String[] args) throws IOException {
BufferedReader buffer = new BufferedReader (new InputStreamReader(System.in));
PrintWriter outputStream = null;
Scanner input = new Scanner (System.in);
int total;
try {
outputStream = new PrintWriter (new FileOutputStream ("par.txt"));
System.out.println("How many lines are there in the paragraph you'll enter?");
int lines = input.nextInt();
System.out.println("Enter the paragraph: ");
String paragraph = buffer.readLine();
outputStream.println(paragraph);
int j;
for (j = 1; j<lines; j++) {
paragraph = buffer.readLine();
outputStream.println(paragraph);
}
outputStream.close();
System.out.println("The paragraph is written to par.txt");
for (int k=1; k<lines; k++) {
paragraph = buffer.readLine();
total = countLetters (paragraph, 'A');
if (total != 0)
System.out.println("A: "+total);
//I'll do bruteforce here up to lowercase z
}
}
catch(FileNotFoundException e) {
System.out.println("Error opening the file par.txt");
}
}
}
import java.io.*;
导入java.util.*;
公开课练习1{
公共静态整数计数字母(字符串行、字符字母表){
整数计数=0;
对于(int i=0;i在一个循环中执行所有操作:
for (j = 1; j<lines; j++) {
paragraph = buffer.readLine();
total = countLetters (paragraph, 'A');
if (total != 0)
System.out.println("A: "+total);
outputStream.println(paragraph);
}
for(j=1;j在一个循环中完成所有操作:
for (j = 1; j<lines; j++) {
paragraph = buffer.readLine();
total = countLetters (paragraph, 'A');
if (total != 0)
System.out.println("A: "+total);
outputStream.println(paragraph);
}
for(j=1;j首先,您最初读取的用户输入有点浪费,因为您先读取一次,然后为其余部分输入for循环-这不是问题,只是一个更好的代码
// your code
String paragraph = buffer.readLine();
outputStream.println(paragraph);
int j;
for (j = 1; j<lines; j++) {
paragraph = buffer.readLine();
outputStream.println(paragraph);
}
上面给出了每行中每个字符的出现次数-现在只需对它们进行组织,以跟踪整个文件的总数
就代码而言,可能有更好的方法来编写它,以实现更干净的实现,但上面的内容很容易理解(我只是写得很快)。首先,您最初读取用户输入有点浪费,因为您只需读取一次,然后进入for循环就可以了——这不是问题,只是一个更好的代码
// your code
String paragraph = buffer.readLine();
outputStream.println(paragraph);
int j;
for (j = 1; j<lines; j++) {
paragraph = buffer.readLine();
outputStream.println(paragraph);
}
上面给出了每行中每个字符的出现次数-现在只需对它们进行组织,以跟踪整个文件的总数
在代码方面,可能有更好的方法来编写此代码,以实现更清晰的实现,但上面的内容很容易理解(我只是写得很快)。您可以使用哈希表来计算每个大小写的感知字母:
final Pattern patt = Pattern.compile("A-Za-z]");
final HashMap<Character, Integer> tabChar = new HashMap<Character, Integer>(
52);
// replace : paragraph = buffer.readLine();
// Unless you use it outside, you can declare it 'final'
final char[] paragraph = "azera :;,\nApOUIQSaOOOF".toCharArray();
for (final Character c : paragraph ) {
if (Character.isLetter(c)) {
Integer tot = tabChar.get(c);
tabChar.put(c, (null == tot) ? 1 : ++tot);
}
}
您可以使用final TreeSet ts=new TreeSet(tabChar.keySet());
对字符进行排序,然后get(c);
从tabChar
中获取字符。您可以使用哈希表对每个大小写敏感字母进行计数:
final Pattern patt = Pattern.compile("A-Za-z]");
final HashMap<Character, Integer> tabChar = new HashMap<Character, Integer>(
52);
// replace : paragraph = buffer.readLine();
// Unless you use it outside, you can declare it 'final'
final char[] paragraph = "azera :;,\nApOUIQSaOOOF".toCharArray();
for (final Character c : paragraph ) {
if (Character.isLetter(c)) {
Integer tot = tabChar.get(c);
tabChar.put(c, (null == tot) ? 1 : ++tot);
}
}
您可以使用final TreeSet ts=new TreeSet(tabChar.keySet());
对字符排序,然后get(c)
他们来自tabChar
前面的答案本可以解决您的问题,但避免暴力的另一种方法可能是使用ASCII字符值的循环。前面的答案本可以解决您的问题,但避免暴力的另一种方法可能是使用ASCII字符值的循环。我无法解决您的问题,但我建议您将包装为(int k=1;kThanks@gobernador!让我看看是否正确。我将声明private final char[]alpha={A','B',…,'A','B',…};
以及for
循环中我将放入for(char letter:alpha)
?最后一个。您提到的将字母强制转换为小写z。然后,您将调用total=countLetters(段落,字母);
这不会解决您的问题,但我建议您将包装为(int k=1;kThanks@gobernador!让我看看我是否做对了。我将声明private final char[]alpha={'A'、'B'、…、'A'、'B'、…};
以及for
我将在for(char-letter:alpha)中放入什么循环
?最后一个。就是您提到的将粗体字改为小写z的那个。然后,您将调用total=countLetters(段落,字母)我尝试了它,但是我尝试了三行,例如,在第一行之后,它停止并将该行写入PAR.TXT。它甚至不计算一个'S.Hello JMyNyk的数目!我试过了,但是我想要三行,在第一行之后,它停止并将该行写入PAR.TXT。它甚至不计数。谢谢,TS!这个aligninfle
不同于我的段落
?段落是输入的-来自用户-这是一个一行一行的文件,基本上是逐行读取文件的。再次感谢!我如何浏览每一行?对不起,只是我还不熟悉Java语法hile循环逐行遍历文件。因此,变量aLineInFile表示文件中的一行。谢谢!但是字符串ChartoLokat与字符字母表
不匹配。我也无法将字符串键入字符。谢谢,TS!因此此aligninfle
与我的段落
不同。段落是输入的-c来自用户的ame-这是一个行内文件,基本上是逐行读取您的文件。再次感谢!我如何遍历每一行?对不起,只是我还不熟悉Java语法。请看编辑的while循环,它逐行遍历文件。因此,变量aLineInFile表示文件中的一行谢谢!Bu字符串charToLookAt与字符字母表不匹配。我也无法将字符串键入字符。
{F=1, A=1, O=4, I=1, U=1, Q=1, S=1, e=1, a=3, r=1, p=1, z=1}