Java将文本拆分为数组,然后添加值

时间:2015-07-22 22:36:31

标签: java arrays substring filereader trim

所以我有这个文本文件:

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

第一个数字是事件代码(介于1和4之间)。中间的四位数是竞争对手在比赛中的得分(例如:Mae Berenice Meite在比赛4中得分为55.45)。最后一位是竞争对手的团队积分,这些积分将被添加到该团队的总跑数中(Meite为FRA的团队总数增加5分)。

我已经设法使用列数分割下一行的每一行,如下所示:

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等)的情况下完成此操作,并在我浏览和阅读每行文本时添加它们,但这不起作用,因为我需要将每个团队的积分的运行总数与竞争对手的名称和国家/地区名称相关联,以便我可以将所有这些数据一起输出。

有没有办法可以通过我的开始做到这一点,或者从一开始就以不同的方式做到这一点?

1 个答案:

答案 0 :(得分:2)

如果我已正确阅读并理解您的问题,我最好的建议是为每个国家/地区创建一个对象。以下内容:

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