有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将数组元素与下一个数组进行比较,并在该元素为新元素时重新开始

所以我有类似的数据

a
a
a
a
b
b
c
d
d
d

我想建立一个程序,程序可以计算我的文档中每个字符串的数量。根据上面的数据,我希望结果是a=4b=2c=1d=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

是的,这是一个日期,但我以字符串数据类型保存了它,所以我认为这不应该是个问题。对于任何试图回答我问题的人,非常感谢,但我得到的结果与我使用上述代码得到的结果没有太大区别。所以我还是不知道怎么了


共 (4) 个答案

  1. # 1 楼答案

    在我看来,你的策略和算法是正确的——但你需要数一数第一个——你要去的地方count=0你已经看完了一个,所以你需要改为count=1

    您还有一些其他问题: while中的readline会丢弃它的结果,因此您只需每隔一行读取一次。 前端的读线可能会导致损耗,而不是将电流设置为无效(0?)然后从那里进入循环

    使用HasSET的另一个(也许更好的)解决方案,你可以考虑。

  2. # 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));
    
        }
    

    }

  3. # 3 楼答案

    我会使用一个映射,用字符串作为键,用整数作为值来填充它。因此,您可以询问地图是否已经包含下一个键,如果是,则计算值,如果没有,则输入一个新键,并将值设置为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));
    }
    
  4. # 4 楼答案

    如果数据按如下方式排列在文本文件中,则此答案有效:

    a
    a
    a
    a
    b
    b
    b
    c
    c
    c
    

    我的答案使用了Scanner class,希望你能发现它很有用。我刚把扫描仪硬编码为从一个名为stack的文件中读取。txt。这是用于我自己的测试,所以一定要更换堆栈。带有文件名的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);