【问题标题】:How to split file items into array?如何将文件项拆分为数组?
【发布时间】:2018-10-21 21:18:08
【问题描述】:

我有一个文件,其中包含如下数据:

Australia,1
Spain,3
Rome,7
Germany,2

现在我知道我们可以使用 split 函数来分隔国家名称和数字。

Scanner sc=new Scanner(f);
while(sc.hasNextLine()) {
    String line=sc.nextLine();
    String[] teams=line.split(",");
    System.out.println(teams[0]);
}

类似的东西。 但是当我希望打印数组的第一个元素时:

    System.out.println(teams[0]);

我得到的输出为:

Australia
Ghana
China
Spain

我想要的是当我尝试打印时:

    System.out.println(teams[0]);

我只想要 澳大利亚 作为输出。 当我尝试时:

System.out.println[(teams[1]); 
I want output as Spain

我该怎么做?

这是我的代码:

import java.io.File;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Team {

private String name;
private int ranking;
private int yellowCard;
private int redCard;
int won;
int loss;
int draw;
static String[] arr;
String goalScored;



public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getRanking() {
    return ranking;
}

public void setRanking(int ranking) {
    this.ranking = ranking;
}

public int getYellowCard() {
    return yellowCard;
}

public void setYellowCard(int yellowCard) {
    this.yellowCard = yellowCard;
}

public int getRedCard() {
    return redCard;
}

public void setRedCard(int redCard) {
    this.redCard = redCard;
}

public static void readFile(File f) {

    try {
        Scanner sc=new Scanner(f);
        while(sc.hasNextLine()) {

            String line=sc.nextLine();
            String[] teams=line.split(",");
            System.out.println(teams[0]);
//              int count=teams.length;
//              
//              int i=0;
//                  if(i%2 ==0) {
//                      
//                      Team team=new Team();
//                      String teamNames=teams[i];
//                      team.setName(teamNames);
//                      System.out.println(team.getName());
//                  }
            }

        //}
    }
    catch(Exception e) {
        System.out.println(e);
    }

}

public static void main(String[] args) {
    // TODO Auto-generated method stub

    File f=new File("files/teams.txt");
    Team.readFile(f);
}

}

【问题讨论】:

  • 发布一个工作示例,生成您所说的输出。
  • 在您的代码中,teams 代表一个数组:{country, number}。对于每一行,您打印数组的第一个元素,即国家/地区。如果您只想要第一个国家,请将每个国家/地区放在一个列表或数组中,然后打印第一个
  • 怎么样??你能举个例子吗@HBo
  • 好吧,@azro 给出了一个很好的答案!

标签: java arrays split file-handling


【解决方案1】:

您的打印在读取您的文件的loop 中,因此它会在每一行打印国家/地区名称

您需要将它们全部存储起来,然后在 loop 之后根据需要检索它们,并将所有这些都存储在 List 中,因为您事先不知道大小(构建数组所需的)

List<String> list = new ArrayList<>();
Scanner sc = new Scanner(f);
while (sc.hasNextLine()) {
    String line = sc.nextLine();
    String[] teams = line.split(",");
    list.add(teams[0]);
}
System.out.println(list.get(0));    // Australia
System.out.println(list.get(1));    // Spain

如果你真的需要array之后:

while (sc.hasNextLine()) {
    //...
}
String[] res = list.toArray(new String[0]);
System.out.println(res[0]);         // Australia
System.out.println(res[1]);         // Spain

使用 Java 8 Streams 你可以做到:

String[] resArray = Files.readAllLines(f.toPath()).stream()
                         .map(s -> s.split(",")[0])   
                         .toArray(String[]::new);
// or
List<String> resList = Files.readAllLines(f.toPath()).stream()
                            .map(s -> s.split(",")[0])
                            .collect(Collectors.toCollection(ArrayList::new));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 2018-10-03
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    相关资源
    最近更新 更多