java - 读取文件然后将字符串转换为 ascii 以制作频率计数器 java

标签 java

你好,这段代码我正在尝试读取一个文件。读取文件后,我试图获取文件中每个字符的ascii值,然后制作大写字符、小写字符和数字的频率计数器

使用我的代码,我尝试逐行读取文件并将它们相应地放入每个数组中。然后我可以将该数组用作频率计数器,看看有多少个大写字符、小写字符和数字。

import java.io.*;

public class Counting 
{
    char[] upper;
    char[] lower;
    int[] num;
    int u1 = 0;
    int l1= 0;
    int n1 = 0;
    File inFile;

public void ReadFile( String nfile ) throws IOException
{
    inFile  = new File( nfile );
    BufferedReader reader = new BufferedReader( new FileReader( inFile ) );
    //... Loop as long as there are input lines.
    String speech = null;
    //char[] charArray = null;

    while ( ( speech = reader.readLine() ) != null) 
    {
        int slength = speech.length();

        //charArray = speech.toCharArray();



        AddToArrays(speech, slength);

    }

    //... Close reader and writer.
    reader.close();  // Close to unlock.
}

public void AddToArrays(String c, int l)
{
    /*for(int i = 0; i < l; i++)
    {
        if( (int) c[u1] > 64 && (int) c[u1] < 91)
        {
            upper[u1] = c[i];
            u1++;
        }
        if( (int) c[l1] > 96 && (int) c[l1] < 123)
        {
            lower[l1] = c[i];
            l1++;
        }
        if( (int) c[n1] > 47 && (int) c[n1] < 58)
        {
            num[l1] = c[i];
            n1++;
        }
    }*/
    for(int i = 0; i < l ; i++)
    {
        char character = c.charAt(i);
        int ascii = (int) character;

        if( ascii > 64 && ascii < 91)
        {
            upper[u1] = character;
            u1++;
        }
        if( ascii > 96 && ascii < 123)
        {
            lower[l1] = character;
            l1++;
        }
        if( ascii > 47 && ascii < 58)
        {
            lower[n1] = character;
            n1++;
        }
    }

}

public void DisplayResults(int u, int l, int n)
{
    System.out.println("Upper characters: " + u);
    System.out.println("lower characters: " + l);
    System.out.println("Numbers:          " + n);
}

public static void main( String[] args ) 
{
    try
    {
        Counting rFile = new Counting();
        rFile.ReadFile( "Speech.txt" );
        rFile.DisplayResults( rFile.u1, rFile.l1, rFile.n1 );

    }
    catch ( IOException e )
    {
        System.out.println( e.getMessage() );
    }

}

}

我收到以下错误:

线程“main”中的异常 java.lang.NullPointerException

在 Counting.AddToArrays(Counting.java:64)

在 Counting.ReadFile(Counting.java:29)

在 Counting.main(Counting.java:93)

我最近开始进行 java 编程。

如果有人能帮忙,谢谢。

最佳答案

你只是在声明你的数组,并没有在你的代码中初始化它们的地方:

char[] upper;
char[] lower;

因此,当您尝试访问这些数组中的元素时,您将得到 NullPointerException:

        upper[u1] = character;

        lower[l1] = character;

你需要在使用前初始化这些数组:

upper = new char[desiredLength];
lower = new char[desiredLength];

关于java - 读取文件然后将字符串转换为 ascii 以制作频率计数器 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26226759/

相关文章:

java - 如何使用ASM进行字节码转换后定义类(类文件版本0.0)

java - 事件处理方法无法正常工作

java - 谁有资料如何使用人脸检测相机 2 API?

java - URLConnection 的 InputStream 中的数据不完整

java - Spring 工具套件 - Hello World

java - App Engine SearchAPI : java. util.concurrent.CancellationException:任务已取消

java - Heroku - 致命 : password authentication failed for user <>

java - 普特斯特拉不工作

java - 如何设置 ScheduledExecutorService 在用户退出程序时结束?

java - 任务 ':compileGroovy'的执行失败。 org.springframework.security.authentication.encoding.PasswordEncoder