如何计算Java中数组中某个单词的出现?

时间:2018-01-08 05:24:38

标签: java arrays arraylist

我正在开发一个项目,我必须将文件中的数据读入我的代码,在txt文件中我有数据列,我已经设法将每列数据分成一个带有此代码的数组。

public static void main(String[] args) {

    String line = "";
    String date = "";
    ArrayList<String> date = new ArrayList<String>();

    try {
        FileReader fr = new FileReader("list.txt");
        BufferedReader br = new BufferedReader(fr);

        while ((line = br.readLine()) != null) {
            line.split("\\s+");
            date.add(line.split("\\s+")[0]);
            System.out.println(line.split("\\s+")[0]);
        }
    } catch (IOException e) {
        System.out.println("File not found!");
    }

这将从“list.txt”文件输出第一列数据,该文件是......

30-Nov-2016
06-Oct-2016
05-Feb-2016
04-Sep-2016
18-Apr-2016
09-Feb-2016
22-Oct-2016
20-Aug-2016
17-Dec-2016
25-Dec-2016

但是,我想计算单词“Feb”的出现,例如它会出现......

“2月发生:2次”

但是我很难找到合适的代码,有人可以帮助我解决这个问题,我已经尝试了24小时以上,任何帮助将不胜感激,我找不到任何其他帮助我的问题。

2 个答案:

答案 0 :(得分:0)

为简单起见,您可以简单地使用正则表达式,例如......

Pattern p = Pattern.compile("Feb", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("30-Nov-2016, 06-Oct-2016, 05-Feb-2016, 04-Sep-2016, 18-Apr-2016, 09-Feb-2016, 22-Oct-2016, 20-Aug-2016, 17-Dec-2016, 25-Dec-2016");
int count = 0;
while (m.find()) {
    count++;
}
System.out.println("Count = " + count);

根据输入,它将是2

现在,显然,如果你一次从一个文件中读取每个值,这不是那么有效,而只是使用类似的东西......

if (line.toLowerCase().concat("feb")) {
    count++;
}

会简单快捷

更新...

所以,根据提供的输入数据和以下代码...

Pattern p = Pattern.compile("Feb", Pattern.CASE_INSENSITIVE);
int count = 0;
try (BufferedReader br = new BufferedReader(new InputStreamReader(Test.class.getResourceAsStream("Data.txt")))) {
    String text = null;
    while ((text = br.readLine()) != null) {
        Matcher m = p.matcher(text);
        if (m.find()) {
            count++;
        }
    }
    System.out.println(count);
} catch (IOException ex) {
    Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}

打印67

现在,这是强力方法,因为我正在检查整条线。为了克服文本中可能存在的不匹配,您应该使用公共分隔符(即制表符)拆分该行并检查第一个元素,例如......

String[] parts = text.split("\t");
Matcher m = p.matcher(parts[0]);

答案 1 :(得分:0)

另一种解决方案可能是使用split

String month = "Feb";
int count = 0;
while ((line = br.readLine()) != null) 
{
   String strDate = line.split("\\s+")[0]; // get first column, which has date
   String temp = strDate.split("\\-")[1]; // get Month from extracted date.
   if (month.equalsIgnoreCase(temp))
   {
      count++;
      // or store strDate into List for further process.
   }
}
System.out.println (count);// should print total occurrence of date with Feb month

<强> ==被修改==

因为,您使用line从每个line.split("\\s+")[0]中提取日期,这意味着实际字符串只包含日期将提取字符串。