- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家好,我正在尝试从 csv 文件中读取字符串、int 和 double。这是我的 csv 文件中的示例:
World Development Indicators
Number of countries,252
CountryName,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012
Aruba,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.029310471,0,0,2.138784453,3.605985937,3.98141538,6.16435217,13.48254011,16.50927821,57.05427692,65.05605558,72.10431377,99.64250268,103.3849507,108.1325002,112.2180618,119.2038996,126.2103374,129.72824,0,131.8565401
Andorra,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.307211734,1.278625641,1.250259142,4.424155104,8.538444783,13.44671556,22.12730607,32.14530928,35.99902139,43.27794118,45.77115817,68.60251444,73.82494308,79.48487497,84.27763597,78.1171579,80.2836099,82.06181111,84.06818386,83.53432222,81.50204186
Afghanistan,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.112598381,0.865196277,2.498055472,4.826865367,9.833164022,17.71624331,29.22037376,37.89493697,45.77817474,60.32631999,60.35299258.
我需要将字符串读入名为String[]countryNames
的数组,读取年份并将其存储到int[]yearLabels
中,最后将双double[][]cellularDataTable
.
我为每个数组创建了一个函数,名为 public String[] getCountryNames()
、public int[] getYearLabel()
和 public data[][ ] getCellularDataTable()
。我创建了名为 Class CSVReader
的类,这些方法位于我的类中。在字符串数组函数中,我打算跳过类的第一行并读取行 Number of states,252
并存储 252 作为字符串数组的大小,然后返回它或存储每个将国家/地区放入字符串数组中。我的算法是错误的,需要一些指导。 Year 函数仅用于读取年份,因此基本上获取国家/地区行并将其存储在年份中,而 double[][] 函数则读取国家/地区和统计数据。因为我将把数组传递到我的 TestClass 中,例如:
CSVReader parser = new CSVReader(FILENAME);
String [] countryNames = parser.getCountryNames();
int [] yearLabels = parser.getYearLabels();
double [][] parsedTable = parser.getCellularDataTable();
下面是我的 CSVReader 类文件:
import java.io.*;
import java.util.Scanner;
public class CSVReader {
String[] countryNames;
int[] yearNum;
double[][] tables;
Scanner scan;
public CSVReader(String filename)// throws FileNotFoundException
{
File file = new File(filename);
try
{
scan = new Scanner(file);
}
catch(FileNotFoundException e)
{
System.out.println(e.getMessage());
}
}
public String[] getCountryNames()
{
scan.nextLine();
while(scan.hasNext())
{
final String input = scan.nextLine();
String[] country = input.split(",");
//int a = Integer.parseInt(countryNames[1]);
System.out.println(country[0]);
int numberOfCountries = Integer.parseInt(country[1]);
}
scan.close();
}
public int[] getYearLabels()
{
}
public double[][] getParsedTable()
{
}
}
如果有人可以给我如何存储字符串、int 和 double 的例子,我相信我能理解。我想我已经有了我的想法,只是不知道如何实现代码。将感谢您的帮助,我是编程新手。谢谢
最佳答案
从设计的角度来看,您应该读取一次文件并存储数据,以便以后可以快速访问它。没有理由将解析分离到多个位置;只需立即进行所有解析并将其存储在应该存放的位置即可。
使用当前的范例,您应该在构造函数中读取所有文件,这样一旦您开始使用您构造的对象,所有数据都已被读入。
import java.io.*;
import java.util.Scanner;
public class CSVReader {
String[] countryNames;
int[] yearNum;
double[][] tables;
public CSVReader(String filename) throws FileNotFoundException{
File file = new File(filename);
Scanner scan = new Scanner(file);
scan.nextLine(); //Skip the header line
//Read the int on the next line to allocate arrays
String numLine = scan.nextLine();
final int n = Integer.parseInt(numLine.split(",")[1]); //Number is the string portion after the first comma
//Allocate arrays with length n
countryNames = new String[n];
tables = new double[n][];
//Read in the header line of years, parse and copy into yearNum
String[] yearHeaders = scan.nextLine().split(",");
final int m = yearHeaders.length - 1;
yearNum = new int[m];
for(int i = 0; i < m; i++){
yearNum[i] = Integer.parseInt(yearHeaders[i+1]); //i+1 to skip the first entry in the string arr
}
//Now read until we run out of lines - put the first in country names and the rest in the table
int c = 0;
while(scan.hasNext()){
String[] inputArr = scan.nextLine().split(",");
countryNames[c] = inputArr[0];
tables[c] = new double[m];
for(int i = 0; i < m; i++){
tables[c][i] = Double.parseDouble(inputArr[i+1]);
}
c++;
}
scan.close();
}
public String[] getCountryNames(){
return countryNames;
}
public int[] getYearLabels(){
return yearNum;
}
public double[][] getParsedTable(){
return tables;
}
}
关于java - 从 csv 文件读取字符串、int 和 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26285086/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!