Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算字符串的字母(大写和小写)_Java_File Io_For Loop - Fatal编程技术网

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}