数组输出随机字符序列而不是所需结果

时间:2015-02-14 02:02:56

标签: java arrays string csv

我正在尝试编写一个程序来输出从csv文件接收的数据。 CSV文件由28个左右的字符串/行组成,行中的每个数据用逗号分隔为5个类别(团队名称,联盟,教练,分部和全职)。

我实际上有几个问题......

  1. 当我运行我的程序时,我会在我的教练类别中收到一个随机的字符序列(例如:[Ljava.lang.String; @ 5e34d46a],而不是我期待的名字。这与它在阵列中有什么关系吗?我将如何解决它。

  2. 每个字符串的类别在输出中显示为列表,我想将字符串数据输出到一行中。例如,而不是输出显示: 球队名称:A队 联赛:西部联盟 教练:[Ljava.lang.String; @ 1c751d58 师:2 全职:真实

  3. 我希望它显示为一行。

    1. 输出中字符串的单个实例的最后一个类别附加到下一个字符串的第一个类别。像这样:全职:trueTeam名称:团队A.我如何将其分开?
    2. 我的Team.java代码:

      public class Team 
      {
       private String name;
       private String league;
       private String[] coaches;
       private String division;
       private boolean fullTime;
      
       public Team(String dataLine)
       {
          String[] data = dataLine.split(",");
          this.name = data[0];
      
          this.coaches = getStringAsArray(data[1], ":");
      
          this.league = data[2];
      
          this.division = data[3];
      
          this.fullTime = data[4].equals("yes");      
      
       }
      
       public Team(){
      
       }
      
       private String[] getStringAsArray(String t, String delimiter)
       {
          String[] result = t.split(delimiter);
          return result;
       }
      
       private String getArrayAsString(String[] coaches)
       {
      
          coaches = this.getCoaches();
          String result = "";
          for(int i = 0; i<coaches.length; i++)
          {
              result += coaches[i] +" ";
          }
          result = result.trim();
          return result;
       }
      
       public void setName(String name)
       {
          this.name = name;
       }
      
       public String getName()
       {
          return this.name;
       }
      
       public void setCoaches(String coaches)
       {
          this.coaches = getStringAsArray(coaches, ":");
       }
      
       public String getCoachesAsString()
       {
      
          String result = getArrayAsString(coaches);
          return result;
       }
      
       public boolean isFullTime() {
          return fullTime;
       }
      
       public void setFullTime(boolean fullTime) {
          this.fullTime = fullTime;
       }
      
       public String getDivision() {
          return division;
       }
      
       public void setDivision(String division) {
          this.division = division;
       }
      
       public String[] getCoaches() {
          return coaches;
       }
      
       public void setCoaches(String[] coaches) {
          this.coaches = coaches;
       }
      
       public String getLeague() {
          return league;
       }
      
       public void setLeague(String league) {
          this.league = league;
       }
      
       @Override
       public String toString() {
          return "Team name: " + name + "\nLeague: " + this.league + "\nCoaches: "       + this.coaches +  "\nDivision: " + this.division + "\nFull Time: " +   this.fullTime;
      
       }
      }
      

      我的StoreData.java代码:

      import shiftershape.model.Team;
      import  java.util.ArrayList;
      
      public class StoreData {
      public static ArrayList<Team> teams = new ArrayList<Team>();
      
      public static String getTeams()
      {
          String s = "";
          for(int i = 0; i < teams.size(); i++){
              s += teams.get(i);
      
          }
          return s;
      }
      
      public static ArrayList<Team> TeamListFromArray(String[] as)
       {
           ArrayList<Team> teams = new ArrayList<Team>();
          // for( int i= 0 ; i < as.length; i++){
           for (String s: as){
              teams.add(new Team(s));
           }
           return teams;
       }
      
      }
      

      我的ReadCSV.java代码:

       import Utilities.StoreData;
       import java.io.BufferedReader;
       import java.io.FileNotFoundException;
       import java.io.FileReader;
       import java.io.IOException;
       import java.util.ArrayList;
       import shiftershape.model.Team;
      
       public class ReadCsv {
      
       public void readCsv() {
      
          String csvFileToRead =   "C:/Users/Fryyy/Desktop/FootballRepo/TestData/football_teams_phase1.csv";
          BufferedReader br = null;
          String line = "";
      
          try {
      
              br = new BufferedReader(new FileReader(csvFileToRead));
              int i = 0;
              while ((line = br.readLine()) != null) {
                  Team one = new Team(line);
      
                  if(i > 0){
                       StoreData.teams.add(new Team(line));
                  }else{
                     i++;
                  }
              }
          }
          catch (FileNotFoundException e) {
              e.printStackTrace();
          } catch (IOException e) {
              e.printStackTrace();
          } finally {
              if (br != null) {
                  try {
                      br.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
          }
       }
      
      public static ArrayList<Team> getTeams() {
          return StoreData.teams;
        }
      
         public static void setTeams(ArrayList<Team> teams) {
          StoreData.teams = teams;
        }
       }
      

      我的FootballC.java代码:

      import Utilities.StoreData;
      import shiftershape.model.Team;
      
      public class FootballC {
       public static void main(String[] args)
      {
      
      
      
          ReadCsv junk = new ReadCsv();
          junk.readCsv();
          System.out.println(StoreData.getTeams());
      
      
        }
      }
      

3 个答案:

答案 0 :(得分:0)

System.out.println(StoreData.getTeams());会在String []

上调用toString()

试试这个:

for (String s : StoreData.getTeams()) {
    System.out.println(s);
}

答案 1 :(得分:0)

[Ljava.lang.String; @ 5e34d46a)是打印到标准输出时对象的资源代码。在这种情况下,它是一个字符串,所以在某处你看起来像是在打印一个数组而不是数组中的值,导致显示资源ID而不是其中的值,因为Java没有打印数组内容默认。

答案 2 :(得分:0)

[Ljava.lang.String; @ 1c751d58是数组的String版本。数组没有很好的toString()方法。如果您使用Lists而不是Arrays,它将打印得更好。

将数组快速转换为列表是Arrays.asList(array);