【问题标题】:Array outputs random sequence of characters instead of desired result数组输出随机的字符序列而不是期望的结果
【发布时间】:2015-02-14 02:02:56
【问题描述】:

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

其实我有几个问题...

  1. 当我运行我的程序时,我在我的教练类别中收到一个随机的字符序列(例如:[Ljava.lang.String;@5e34d46a),而不是我期望的名称。这是否与它在数组中有关?我将如何解决它。

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

我希望它显示为一条线。

  1. 输出中单个字符串实例的最后一个类别附加到下一个字符串的第一个类别。像这样:全职:true 团队名称:A 团队。我该如何区分?

我的 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());


  }
}

【问题讨论】:

    标签: java arrays string csv


    【解决方案1】:

    System.out.println(StoreData.getTeams()); 将在 String[] 上调用 toString()

    试试这个:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-08
          • 2022-06-12
          • 2020-07-27
          • 2020-03-04
          • 1970-01-01
          • 2022-01-03
          • 1970-01-01
          • 2017-03-09
          相关资源
          最近更新 更多