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...