2013-10-24 4 views
1

제가이 질문에 꼼짝 거리지 않는 java.but에 대해 더 많은 것을 이해할 수 있도록 도와주는 자체 프로젝트를하고 있습니다. (이름, 취미) 모든 라인을 읽고 ArrayList의에 넣어하는 가장 좋은 방법은 무엇JAVA - readfile 그리고 arraylist에 넣으십시오.

Name Hobby 
Susy eat fish 
Anna gardening 
Billy bowling with friends 

: 는 나는 다음과 txt 파일이 있습니다. 그러나 까다로운 부분은

가 공백이 있고 하나 개의 배열에 따라 처해야한다 분명히 내가 그것을 하드 코딩 할 수없는 친구와 함께 생선이나 볼링을 먹는 것입니다. 여기, 2.names 만 만

+0

첫 번째 단어에 공백이 있습니까? 이름/취미는 공백이나 태그로 구분됩니까? 더 많은 정보를주세요. – Darkhogg

+0

'Billy bowling from friends'에서 ArrayList에 항목으로 'bowling with friends'를 추가하면 전체 줄을 읽은 다음 이름과 이름 사이에 오는 첫 번째 공백 문자를 분리 할 수 ​​있습니다. 작업을 텍스트 파일에 저장하십시오. 이것은 하위 문자열 함수와 indexOf를 사용하여 수행 할 수 있습니다. 그러나 이름에 단어가 두 개 이상인 경우 쉼표와 같은 것을 사용하여 텍스트 파일을 변경하여 이름과 작업을 구분하십시오. –

+0

@Darkhogg 1. 취미 및 이름은 공백으로 구분됩니다. 2. 이름은 한 단어 만 가질 수 있습니다. – user2891092

답변

0

대신 scanner.next()을하는 한 단어를해야합니다 사전에

public void openFile(){ 
    try{ 
     x = new Scanner(new File("D://practice.txt")); 
    }catch (Exception e){ 
     System.out.println("File could not be found"); 
    } 
} 

public void readFile(){ 
    while (x.hasNextLine()){ 
     x.nextLine(); 
     if (x.hasNext()){ 
      listL.add(x.next()); 
     } else { 
      listL.add(""); 
     } 

     if (x.hasNext()){ 
      listR.add(x.next()); 
     } else { 
      listR.add(""); 
     } 
    } 
} 

덕분에 ... 노트 = 1.hobby와 이름을 공백으로 구분 내 현재 코드입니다 당신이 그런 짓을 할 수 있습니다 :

이와
Scanner scan = new Scanner(new File("D://practice.txt")); 
ArrayList<String> names = new ArrayList<String>(); 
ArrayList<String> hobbies = new ArrayList<String>(); 

while(scan.hasNext()){ 
    String curLine = scan.nextLine(); 
    int indexOfHobby = curLine.indexOf(' '); 
    names.add(curLine.substring(0, indexOfHobby).trim()); 
    hobbies.add(curLine.substring(indexOfHobby).trim()); 
} 

하나의 문제는 두 ArrayList의 사이에 관계가 없다는 것입니다, 그래서 당신은 당신 마음을해야 할 r 인덱스를 반복합니다. 이 문제를 해결할 수있는 한 가지 방법은 namehobbyPerson의 특성으로 가질 수 있도록 Person 클래스를 추가 한 다음 ArrayListPerson입니다. 즉 다음과 같습니다

Class Person { 
    String name; 
    String hobby; 

    public Person(String name, String hobby){ 
     this.name = name; 
     this.hobby= hobby; 
    } 
    // more methods here 
} 

그런 다음 메인 클래스에서, 당신이 할 거라고 :

Scanner scan = new Scanner(new File("D://practice.txt")); 
ArrayList<Person> people= new ArrayList<Person>(); 

while(scan.hasNext()){ 
    String curLine = scan.nextLine(); 
    int indexOfHobby = curLine.indexOf(' '); 
    people.add(new Person(curLine.substring(0, indexOfHobby).trim(), curLine.substring(indexOfHobby).trim())); 
} 
+1

'trim()'을 사용하여 이름/취미 주변의 공백을 제거하는 것을 고려하십시오. – Darkhogg

+0

@Darkhogg Nice catch; 그것을 추가했습니다. 감사합니다 @netinept. –

+0

나는 당신의 대답을 자바 학습에 대한 지침으로 사용할 것입니다. – user2891092

0

또한 함께 자신의 취미를 가진 사람들을 저장하는 Map<String,String>를 사용하는 대신 서로 다른 두를 유지하는 고려 구조 :

Scanner scan = new Scanner(new File("D://practice.txt")); 
Map<String,String> namesAndHobbies = new HashMap<String,String>(); 

while(scan.hasNext()){ 
    String line = scan.nextLine(); 
    int idx = line.indexOf(' '); 
    String name = line.substring(0, idx).trim(); 
    String hobby = line.substring(idx).trim(); 

    namesAndHobbies.put(name, hobby); 
} 

이렇게하면 이름으로 사람의 취미를 찾을 수 있습니다. namesAndHobbies.keySet()을 사용하여 모든 취미 모음을 얻으려면 모든 이름 모음집을 가져오고 namesAndHobbies.values()을 사용하십시오.

관련 문제