2008-10-25 1 views
2

제목이 매우 명확한 지 모르겠지만 기본적으로 파일의 텍스트 줄을 읽고 분할해야합니다. 최대 8 개의 다른 문자열 변수. 각 줄은 동일한 순서 (제목, 저자, 가격 등)로 동일한 8 개의 청크를 갖습니다. 그래서 각 텍스트 줄마다 8 개의 문자열로 끝내기를 원합니다.stringTokenizer가 텍스트 줄을 미리 정의 된 변수로 분할하는 가장 좋은 방법은 무엇입니까

첫 번째 문제는 줄의 마지막 두 필드가 존재할 수도 있고 없을 수도 있기 때문에 stringTokenizer.hasMoreTokens로 처리해야합니다. 그렇지 않으면 필드 7과 8이 없을 때 혼란 스러울 것입니다.

for 루프 중에 하나를하는 것이 이상적이지만 필드의 순서가 어떻게 될지 루프에 알려주는 방법을 모르겠습니다. 따라서 모든 8 개 (또는 6 개) 문자열을 채울 수 있습니다. 바르게. 8 개의 중첩 된 if 문을 사용하는 것이 더 좋은 방법이라고 말해주십시오!

편집 : String.split 솔루션은 분명히 일부인 것 같아서 stringTokenizer 대신 사용합니다. 그러나, 나는 아직도 생성자에 개별 문자열을 제공하는 최선의 방법을 잘 모르겠다. 클래스를 배열에 기대하고 가장 좋은 방법은 생성자에서 다음과 같이하면됩니다.

line[1] = isbn; 
line[2] = title; 
+0

교육용으로 선택하려면 데이터 샘플을 참조해야합니다. 데이터 형식을 제어 할 수 있습니까? –

답변

3

에게 가장 좋은 방법을 사용하여 문자열의 배열로 들어오는 문자열로 변환하지만, 문자열의 split 방법을 사용할 수 있습니다. 그것은 문자열의 배열을 반환하고, 그 길이를 얻을 수 있습니다. 다음 작업을 수행 할 수있는 파일의 각 라인에 대한

: - 8 문자열

String[] tokens = line.split("#"); 

tokens 이제 6이있을 것이다. 몇 개를 찾으려면 tokens.length()을 사용하고 배열에서 개체를 만듭니다.

1

캡처 그룹이있는 정규 표현식을 사용할 수 있습니까? 표현식의 일부를 선택적으로 만들 수 있습니다.

예제 데이터 행 또는 3 개가 도움이 될 수 있습니다.

0

우연히 CSV 또는 이와 유사한 파일입니까? 그렇다면 Apache Commons CSV과 같은 라이브러리가 있습니다 (해당 페이지의 대안 링크도 있음). 파일의 각 행에 대해 문자열 []을 가져옵니다. 선택적 필드가 있는지 알아 보려면 배열 크기를 확인하십시오.

관련 문제