如何访问在控制台中输入其名称的文本文件? JAVA

时间:2015-06-14 12:39:08

标签: java

在代码中应该改变什么,以便不是在控制台中输入字符串,而是输入文本名称(exmple.txt)来获取文本(频率将被计算在哪里)?

import java.io.*;
class FrequencyCount
{
    public static void main(String args[]) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println ("Enter the Text: ");
        String s = br.readLine();
        System.out.println ("Enter suffix: ");
        String sub = br.readLine();
        int ind,count = 0;
        for(int i = 0; i + sub.length() <= s.length(); i++)    
        {
            ind = s.indexOf(sub, i);
            if (ind >= 0)
            {
                count++;
                i = ind;
                ind = -1;
            }
        }
        System.out.println("Occurence of '"+sub+"' in String is "+count);

    }
}

1 个答案:

答案 0 :(得分:0)

首先,我将重构您的代码,以便重用calculateOcurrences方法。然后我会逐行读取文本文件并按行汇总所有出现的内容。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;

public class Main {

    public static void main(String args[]) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println ("Enter the file path: ");
        final String filePath = br.readLine();

        System.out.println ("Enter suffix: ");
        final String suffix = br.readLine();

        int count = 0;

        Path path = FileSystems.getDefault().getPath(filePath);

        Charset charset = Charset.forName("US-ASCII");
        try (BufferedReader reader = Files.newBufferedReader(path, charset)) {
            String line = null;
            while ((line = reader.readLine()) != null) {
                 count = count + calculateOcurrences(line,suffix);
            }
        } catch (IOException x) {
            System.err.format("IOException: %s%n", x);
        }



        System.out.println("Occurence of '"+suffix+"' in String is "+count);

    }

    public static int calculateOcurrences(final String text, final String suffix) {
        int ocurrences = 0;

        for(int i = 0; i + suffix.length() <= text.length(); i++)
        {
            int indexOfOcurrence = text.indexOf(suffix, i);
            if (indexOfOcurrence >= 0)
            {
                ocurrences++;
                i = indexOfOcurrence;
            }
        }

        return ocurrences;
    }
}