Java 将文本拆分为数组然后添加值
Java split text into array then add values
所以我有这个文本文件:
FRAMae Berenice MEITE 455.455
CHNKexin ZHANG 454.584
UKRNatalia POPOVA 453.443
GERNathalie WEINZIERL 452.162
RUSEvgeny PLYUSHCHENKO 191.399
CANPatrick CHAN 189.718
CHNHan YAN 185.527
CHNCheng & Hao 271.018
ITAStefania & Ondrej 270.317
USAMarissa & Simon 264.256
GERMaylin & Daniel 260.825
FRAFlorent AMODIO 179.936
GERPeter LIEBERS 179.615
JPNYuzuru HANYU 197.9810
USAJeremy ABBOTT 165.654
UKRYakov GODOROZHA 160.513
GBRMatthew PARR 157.402
ITAPaul Bonifacio PARKINSON 153.941
RUSTatiana & Maxim 283.7910
CANMeagan & Eric 273.109
FRAVanessa & Morgan 257.454
JPNNarumi & Ryuichi 246.563
JPNCathy & Chris 352.003
UKRSiobhan & Dmitri 349.192
CHNXintong &Xun 347.881
RUSYulia LIPNITSKAYA 472.9010
ITACarolina KOSTNER 470.849
JPNMao ASADA 464.078
UKRJulia & Yuri 246.342
GBRStacey & David 244.701
USAMeryl &Charlie 375.9810
CANTessa & Scott 372.989
RUSEkaterina & Dmitri 370.278
FRANathalie & Fabian 369.157
ITAAnna & Luca 364.926
GERNelli & Alexander 358.045
GBRPenny & Nicholas 352.934
USAAshley WAGNER 463.107
CANKaetlyn OSMOND 462.546
GBRJenna MCCORKELL 450.091
第一位数字是事件代码(介于一到四之间)。中间四位数字是参赛者在比赛中的得分(例如:Mae Berenice Meite 在比赛 4 中得分为 55.45)。最后一位数字是竞争对手的团队分数,它将添加到该团队的 运行 总分中(Meite 将 5 分添加到 FRA 的团队总分中)。
我已经设法使用列数字拆分 next 的每一行,如下所示:
team = string.substring(0,3).trim();
names = string.substring(3,30).trim();
String[] numbers = new String[3];
numbers[0] = string.substring(30,31);
numbers[1] = string.substring(31,36);
numbers[2] = string.substring(36);
所以我现在把所有东西都整理成这样了:
JPN Yuzuru HANYU 1 97.98 10.0
RUS Tatiana & Maxim 2 83.79 10.0
RUS Yulia LIPNITSKAYA 4 72.9 10.0
USA Meryl &Charlie 3 75.98 10.0
RUS Evgeny PLYUSHCHENKO 1 91.39 9.0
CAN Meagan & Eric 2 73.1 9.0
ITA Carolina KOSTNER 4 70.84 9.0
CAN Tessa & Scott 3 72.98 9.0
CAN Patrick CHAN 1 89.71 8.0
...其余行依此类推。
问题是这样的:我需要将每个团队的四个不同条目合并为一个。因此,例如,我希望这是法国的输出:
FRA Mae Berenice MEITE, Florent Amodio, Vanessa & Morgan, Nathalie & Fabian
22 Points
这列出了 FRA 的所有竞争对手,并将他们在每个项目中的团队积分(最后一位数字)相加,总计最多 22 分。
我不确定如果不为每个国家/地区创建单独的变量(如 usaPoints、fraPoints、gerPoints 等)并在我浏览和阅读每一行文本时添加它们,我如何才能完成此操作,但这是行不通的因为我需要将每个团队的 运行 总积分与竞争对手的名称和国家名称相关联,以便我可以将所有这些数据一起输出。
有没有一种方法可以让我从一开始就做到这一点,或者有一种更有效的方法可以从一开始就做到这一点?
如果我正确阅读并理解了您的问题,我最好的建议是为每个国家/地区创建一个对象。大致如下:
public class Country{
String countryName;
float totalPoints;
List<String> competitors
}
要获得所需的输出,您可以打印国家/地区、列表中每个参赛者的名字(对于列表中的每个字符串...),然后是总分。如果你也想保留每个竞争对手的分数,你可以以类似的方式使用 List<Map<String, float>>
。
您甚至可以将所有国家/地区存储在 Map<String, Country>
~
中
响应您的详细说明请求:
Map<String, Country> countries = new HashMap<String, Country>();
Country country;
//...loop to read the file...
country = countries.get(team);
if (country == null) {
country = new Country();
}
//add information to country
countries.put(team, country);
//...end loop...
所以我有这个文本文件:
FRAMae Berenice MEITE 455.455
CHNKexin ZHANG 454.584
UKRNatalia POPOVA 453.443
GERNathalie WEINZIERL 452.162
RUSEvgeny PLYUSHCHENKO 191.399
CANPatrick CHAN 189.718
CHNHan YAN 185.527
CHNCheng & Hao 271.018
ITAStefania & Ondrej 270.317
USAMarissa & Simon 264.256
GERMaylin & Daniel 260.825
FRAFlorent AMODIO 179.936
GERPeter LIEBERS 179.615
JPNYuzuru HANYU 197.9810
USAJeremy ABBOTT 165.654
UKRYakov GODOROZHA 160.513
GBRMatthew PARR 157.402
ITAPaul Bonifacio PARKINSON 153.941
RUSTatiana & Maxim 283.7910
CANMeagan & Eric 273.109
FRAVanessa & Morgan 257.454
JPNNarumi & Ryuichi 246.563
JPNCathy & Chris 352.003
UKRSiobhan & Dmitri 349.192
CHNXintong &Xun 347.881
RUSYulia LIPNITSKAYA 472.9010
ITACarolina KOSTNER 470.849
JPNMao ASADA 464.078
UKRJulia & Yuri 246.342
GBRStacey & David 244.701
USAMeryl &Charlie 375.9810
CANTessa & Scott 372.989
RUSEkaterina & Dmitri 370.278
FRANathalie & Fabian 369.157
ITAAnna & Luca 364.926
GERNelli & Alexander 358.045
GBRPenny & Nicholas 352.934
USAAshley WAGNER 463.107
CANKaetlyn OSMOND 462.546
GBRJenna MCCORKELL 450.091
第一位数字是事件代码(介于一到四之间)。中间四位数字是参赛者在比赛中的得分(例如:Mae Berenice Meite 在比赛 4 中得分为 55.45)。最后一位数字是竞争对手的团队分数,它将添加到该团队的 运行 总分中(Meite 将 5 分添加到 FRA 的团队总分中)。
我已经设法使用列数字拆分 next 的每一行,如下所示:
team = string.substring(0,3).trim();
names = string.substring(3,30).trim();
String[] numbers = new String[3];
numbers[0] = string.substring(30,31);
numbers[1] = string.substring(31,36);
numbers[2] = string.substring(36);
所以我现在把所有东西都整理成这样了:
JPN Yuzuru HANYU 1 97.98 10.0
RUS Tatiana & Maxim 2 83.79 10.0
RUS Yulia LIPNITSKAYA 4 72.9 10.0
USA Meryl &Charlie 3 75.98 10.0
RUS Evgeny PLYUSHCHENKO 1 91.39 9.0
CAN Meagan & Eric 2 73.1 9.0
ITA Carolina KOSTNER 4 70.84 9.0
CAN Tessa & Scott 3 72.98 9.0
CAN Patrick CHAN 1 89.71 8.0
...其余行依此类推。
问题是这样的:我需要将每个团队的四个不同条目合并为一个。因此,例如,我希望这是法国的输出:
FRA Mae Berenice MEITE, Florent Amodio, Vanessa & Morgan, Nathalie & Fabian
22 Points
这列出了 FRA 的所有竞争对手,并将他们在每个项目中的团队积分(最后一位数字)相加,总计最多 22 分。
我不确定如果不为每个国家/地区创建单独的变量(如 usaPoints、fraPoints、gerPoints 等)并在我浏览和阅读每一行文本时添加它们,我如何才能完成此操作,但这是行不通的因为我需要将每个团队的 运行 总积分与竞争对手的名称和国家名称相关联,以便我可以将所有这些数据一起输出。
有没有一种方法可以让我从一开始就做到这一点,或者有一种更有效的方法可以从一开始就做到这一点?
如果我正确阅读并理解了您的问题,我最好的建议是为每个国家/地区创建一个对象。大致如下:
public class Country{
String countryName;
float totalPoints;
List<String> competitors
}
要获得所需的输出,您可以打印国家/地区、列表中每个参赛者的名字(对于列表中的每个字符串...),然后是总分。如果你也想保留每个竞争对手的分数,你可以以类似的方式使用 List<Map<String, float>>
。
您甚至可以将所有国家/地区存储在 Map<String, Country>
~
响应您的详细说明请求:
Map<String, Country> countries = new HashMap<String, Country>();
Country country;
//...loop to read the file...
country = countries.get(team);
if (country == null) {
country = new Country();
}
//add information to country
countries.put(team, country);
//...end loop...