加载 CSV 和拆分属性
Load CSV and split attributes
我正在尝试加载一个 csv 文件并将 'timespan' 拆分为 'begin' 和 'end'。如果时间跨度由一个日期组成 'begin' 和 'end' 相同。
timespan,someOtherField, ...
27.03.2017 - 31.03.2017,someOtherValue, ...
31.03.2017,someOtherValue, ...
结果:
begin,end,someOtherField
27.03.2017,31.03.2017,someOtherValue, ...
31.03.2017,31.03.2017,someOtherValue, ...
目前我正在使用 OpenCSV 逐行加载文件。这很好用,但我不知道如何拆分一个属性。可能我必须将 CSV 解析为数组?
对于任何行 l
,您可以使用 StringTokenizer
来获取由 ,
:
分隔的标记
StringTokenizer tokens = new StringTokenizer(l, ",")
第一个标记代表timespan
,所以:
String timespan = tokens.nextToken()
然后你可以根据" - "
分割时间跨度,所以:
String[] startEnd = timespan.split(" - ");
最后,你要计算startEnd
的大小,如果startEnd.length == 1
,那么你绝对知道开始begin
和end
是重合的,所以startEnd[0],startEnd[0]
否则结果将如下所示startEnd[0],startEnd[1]
希望能帮到您解决问题。
感谢您的回答!我将 csv 解析为一个额外的 class 并为每条记录创建了一个对象。下面的代码显示了时间跨度的拆分。我现在将从所有对象重建一个新的 csv 文件。
// Load CSV as Booking objects
ArrayList<Booking> bookings = Utils.readCSV(csvClean);
for (int i = 0; i < bookings.size(); i++) {
String timespan = bookings.get(i).getTimespan();
String begin = "";
String end = "";
if (timespan.contains(" - ")) {
// Split timespan and set values
String[] parts = timespan.split(" - ");
begin = parts[0].trim();
end = parts[1].trim();
bookings.get(i).setBegin(begin);
bookings.get(i).setEnd(end);
} else {
bookings.get(i).setBegin(timespan.trim());
bookings.get(i).setEnd(timespan.trim());
} // end if else
} // end for
我正在尝试加载一个 csv 文件并将 'timespan' 拆分为 'begin' 和 'end'。如果时间跨度由一个日期组成 'begin' 和 'end' 相同。
timespan,someOtherField, ...
27.03.2017 - 31.03.2017,someOtherValue, ...
31.03.2017,someOtherValue, ...
结果:
begin,end,someOtherField
27.03.2017,31.03.2017,someOtherValue, ...
31.03.2017,31.03.2017,someOtherValue, ...
目前我正在使用 OpenCSV 逐行加载文件。这很好用,但我不知道如何拆分一个属性。可能我必须将 CSV 解析为数组?
对于任何行 l
,您可以使用 StringTokenizer
来获取由 ,
:
StringTokenizer tokens = new StringTokenizer(l, ",")
第一个标记代表timespan
,所以:
String timespan = tokens.nextToken()
然后你可以根据" - "
分割时间跨度,所以:
String[] startEnd = timespan.split(" - ");
最后,你要计算startEnd
的大小,如果startEnd.length == 1
,那么你绝对知道开始begin
和end
是重合的,所以startEnd[0],startEnd[0]
否则结果将如下所示startEnd[0],startEnd[1]
希望能帮到您解决问题。
感谢您的回答!我将 csv 解析为一个额外的 class 并为每条记录创建了一个对象。下面的代码显示了时间跨度的拆分。我现在将从所有对象重建一个新的 csv 文件。
// Load CSV as Booking objects
ArrayList<Booking> bookings = Utils.readCSV(csvClean);
for (int i = 0; i < bookings.size(); i++) {
String timespan = bookings.get(i).getTimespan();
String begin = "";
String end = "";
if (timespan.contains(" - ")) {
// Split timespan and set values
String[] parts = timespan.split(" - ");
begin = parts[0].trim();
end = parts[1].trim();
bookings.get(i).setBegin(begin);
bookings.get(i).setEnd(end);
} else {
bookings.get(i).setBegin(timespan.trim());
bookings.get(i).setEnd(timespan.trim());
} // end if else
} // end for