2012-04-04 5 views
0

야구 통계의 탭으로 구분 된 파일을 2 차원 arraylist로 읽는 방법을 찾고 있습니다. 나는 스캐너를 사용하여 파일을 읽었지만 한 줄을 배열 목록으로 읽어서 줄 바꿈에서 멈추고 다음 줄을 다음 arraylist로 읽는 방법을 생각할 수 없습니다.탭으로 구분 된 파일을 ArrayList로 읽어들입니다.

다차원 arraylist를 만들려고 처음 시도한 것이고 다차원 배열을 읽는 것과 거의 같을 것이라고 생각했습니다. 나는 분명히 착각했다.

public static ArrayList dataRead(String fileloc) throws FileNotFoundException { 
    ArrayList array = new ArrayList<ArrayList>(); 
    Scanner s = new Scanner(new File(fileloc)).useDelimiter("\t"); 
    ArrayList<String> rows = new ArrayList<String>(); 
    ArrayList cols = new ArrayList(); 
    while(s.nextLine() != null) { 
     cols.add(s.next()); 
    } 
    return array; 
} 

이것은 현재 내 코드입니다. 각 라인을 문자열로 읽고, 리턴 값으로 구분 한 다음, 각 문자열을 적절한 arraylist로 읽는 것이 더 나은 선택일까요?

+1

지금까지 가지고있는 것을 보여주십시오. 또한 질문을하는 방법에 대한 지침은 [faq] 및 [ask]를 참조하십시오. –

+0

라인을 읽거나 그 라인에서 어레이를 생성하는 데 어려움이 있습니까? – twain249

답변

4

opencsv을 사용하고 delimeter를 탭으로 설정할 수 있습니다. 내가 제공 한 링크의 예제를 확인하십시오.

CSVReader reader = new CSVReader(new FileReader("yourfile.csv"), '\t'); 
String [] nextLine; 
while ((nextLine = reader.readNext()) != null) { 
    // nextLine[] is an array of values from the line 
    System.out.println(nextLine[0] + nextLine[1] + "etc..."); 
} 

이 실제 문제가하려고하는 것을 질문에서 명확하지 않지만 '롤 자신의'

1

나는 통계가 어떻게 생겼는지 모르겠지만,을 사용하는 것이 더 좋을 수도 대신에 키/값 쌍이있는 HashMap을 사용하지만 잘못된 것일 수 있습니다. 나는 당신의 데이터 세트가 어떻게 생겼는지 모른다.

처음에는 "\ t"이스케이프 문자를 사용하여 줄을 구분할 수 있습니다. 예 :

스캐너 s = 새 스캐너 (입력) .useDelimiter ("\ t");

그런 다음 결과를 반복하고 모든 쌍마다지도에 추가 할 수 있습니다.

+0

내가 해시 맵을 만들 수 있다면, 나는 말했을 텐데, 나는 특별히 arraylist에게 말을 전했다. useDelimiter는 내가 잊어 버린 것의 큰 부분이었습니다. 가져와 주셔서 감사합니다! – gelliott181

+0

아, 문제 없습니다. 다행히 도울 수있어서 기뻐. lol –

1

데이터 구조를 저장하려고 시도하는 데 도움이 될만한 것으로 다시 생각해야한다고 생각합니다. 플레이어 개체를 만들어 arraylist에 저장하는 것이 좋습니다.

public class Player{ 
    double battavg; 
    String name; 
    //add more values like rbi, etc. 
    public Player(name,battavg){ 
     this.name=name; 
     this.battavg=battavg; 
    } 
    public String getName(){ 
     return name; 
    } 
    public String getBattAvg(){ 
     return battavg; 
    } 
    public setBattAvg(double battavg){ 
     this.battavg=battavg; 
    } 
    public setName(String name){ 
     this.name=name; 
    } 
} 

public class baseball{ 
    public static void main(String[] args){ 
     ArrayList<Player> list = new ArrayList<Player>(); 
     //read in values from csv 
     list.add(new Player(name,battavg)); 
    } 
} 
+0

정말 좋은 생각입니다. 나는 각 플레이어를 물건으로 유지하는 것을 생각하지 않기 때문에 멍청하다고 느낍니다. 또한 작업하기가 훨씬 쉽습니다. 도와 주셔서 감사합니다. – gelliott181

관련 문제