簡體   English   中英

並行陣列和文件讀取

[英]Parallel Arrays and reading from a file

我需要幫助制作一個並行數組,我需要從字符串的文本文件中讀取並創建一個字符串數組,該字符串數組將每個名稱添加一次,並在整數數組中增加重復的字符串.....關於如何解決此問題的任何想法代碼來做到這一點?

    Scanner sc=new Scanner(new File("Cat.txt"));
    String category=sc.nextLine();
    int total=sc.nextInt();
    int[]totcat=new int[total];
    String[]names=new String[total];
    while(sc.hasNextLine())
    {
        String x=sc.nextLine();
        boolean b=false;
        int size=0;
        for(int i=0;i<names.length;i++)
        {
            if(x.equals(names[i]))
            {
                b=true;
                totcat[i]++;
            }
        }
        if(!b)
        {
            names[size]=x;
            totcat[p]++;
            size;
        }
    }

問題是if(names[j].equals(null)) 這永遠不會評估為true ,因為要做到這一點, names[j]必須為null ,因此它將拋出NullPointerException 正確的寫法是if(names[j] == null)

一種更優雅的方法是使用另一個變量來跟蹤數組中有多少個字符串,這樣,如果找不到重復的字符串(您的if(!b)塊),則只需添加字符串即可在由size變量指示的索引處,而不需要遍歷整個數組以尋找null空間。

聽起來您需要讀取帶有以換行符分隔的字符串的文件,並且最終要獲得文件中找到的所有字符串的集合以及文件中每個字符串出現的次數的計數。

建議不要使用基於數組的結構,而建議使用Map。 在閱讀源文件中的每一行時,您會檢查映射以查看字符串值是否已存在於映射中。 如果是這樣,則增加其值(一個int值),否則,將String添加到Map中。

像這樣:

Map<String, Integer> map = new HashMap<>();

try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
  String line;
  while ((line = reader.readLine()) != null) {
    if(map.containsKey(line)) {
      Integer lineCount = map.get(line);
      map.put(line, lineCount++);
    } else {
      map.put(line, 1);
    }
  }
} catch(IOException ioe) {
  // Handle exception
}

這里需要注意的是內存限制。 如果您正在讀取的文件很大和/或Java堆棧大小很小,則可能會遇到OutOfMemoryExceptions。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM