所以我有类似这样的数据
a a a a b b c d d d
我想构建一个程序,程序可以计算文档中每个字符串的数量。所以,从上面的数据来看,我希望结果是a = 4 b = 2 c = 1 d = 3.数据已经排序,所以我想首先我要做一个循环,我将第一个数据与第二。如果匹配,则count变量将递增。如果没有,它会假设它是一个新数据,所以计数重置为0.问题是我没有得到我想要的结果。到目前为止,这是我的代码。
String[] nextLine;
int count=0;
nextLine = reader.readNext();
String current= nextLine[0];
while(reader.readNext()!=null){
nextLine = reader.readNext();
if(current.matches(nextLine[0])){
count++;
}else{
System.out.println("data = "+current+" total = "+count);
count=0;
current = nextLine[0];
}
}
reader是我创建的用于从我的文档中读取的对象。 如果你真的不理解我的意思,我很抱歉。我很难说这句话(英语不是我的第一语言),如果你不明白的话就放弃评论。提前谢谢。
因为你问我得到了什么样的结果,这就是我得到的结果
data = 2013-07-01 total = 2199
data = 2013-07-02 total = 0
data = 2013-07-01 total = 1
data = 2013-07-02 total = 0
data = 2013-07-01 total = 0
data = 2013-07-02 total = 0
data = 2013-07-01 total = 0
data = 2013-07-02 total = 0
........
data = 2013-08-09 total = 0
data = 2013-08-12 total = 1
data = 2013-08-11 total = 0
data = 2013-08-12 total = 7
data = 2013-08-11 total = 0
data = 2013-08-12 total = 0
data = 2013-08-11 total = 0
data = 2013-08-10 total = 0
data = 2013-08-11 total = 0
data = 2013-08-12 total = 0
data = 2013-08-11 total = 1
data = 2013-08-12 total = 1
data = 2013-08-11 total = 1
data = 2013-08-12 total = 0
data = 2013-08-10 total = 0
data = 2013-08-12 total = 0
是的,这是一个约会,但是我把它保存在String数据类型中,所以我觉得它不应该是个问题。对于那些试图回答我的问题的人,非常感谢,但我得到的结果与我使用上面的代码得到的结果并没有太大差别。所以我仍然不知道出了什么问题。
答案 0 :(得分:1)
如果数据在文本文件中排列如下,则此答案将起作用:
a
a
a
a
b
b
b
c
c
c
我的回答使用了Scanner class,希望您觉得它很有帮助。我只是硬编码扫描程序从一个名为stack.txt的文件中读取。这用于我自己的测试,所以一定要用你的文件名替换stack.txt。
Scanner scanner = new Scanner (new File ("stack.txt"));
int charFrequency = 0;
String value = "";
while (scanner.hasNext()){
String tempValue = scanner.next();
if ("".equals(value)) {
value = tempValue;
charFrequency ++;
}
else if (value.equals(tempValue)) {
charFrequency ++;
}
else {
System.out.println("Data: " +value+" Count: "+charFrequency);
value = tempValue;
charFrequency = 1;
}
}
System.out.println("Data :" +value+" Count: "+charFrequency);
答案 1 :(得分:0)
在我看来,你的策略和算法都是正确的 - 但是你需要计算第一个 - 你要去的地方数= 0你已经读过一个因此你需要去计数= 1。
您还有一些其他问题: while中的readline会丢弃它的结果,所以你只读取每一行。 前面的readline会造成损失 - 而是将电流设置为无效(0?),然后从那里开始循环。
您可以考虑使用HashSet的另一个(也许是更好的)解决方案。
答案 2 :(得分:0)
我会使用地图并用字符串作为键填充它,并将整数填充为值。所以你可以询问地图是否已经包含下一个密钥,如果是,则计算该值,如果没有放入新密钥并将值设置为1。
类似的东西:
List<String> asList = Arrays.asList("a", "b", "a", "b", "a", "a");
HashMap map = new HashMap<String, Integer>();
for (String s : asList) {
if(map.containsKey(s))
map.put(s, (int) map.get(s) + 1);
else
map.put(s, 1);
}
for (Object s : map.keySet()) {
System.out.println(map.get(s));
}
答案 3 :(得分:-2)
试试这个: -
public static void main(String[] args) {
List asList = Arrays.asList("a","b","a","b","a","a",...);
Set<String> mySet = new HashSet<String>(asList);
for(String s: mySet){
System.out.println(s + " " +Collections.frequency(asList,s));
}
}