我正在开发一个项目,我必须将文件中的数据读入我的代码,在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小时以上,任何帮助将不胜感激,我找不到任何其他帮助我的问题。
答案 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]
中提取日期,这意味着实际字符串只包含日期将提取字符串。