StringTokenizer가 텍스트 줄을 사전 정의 된 변수로 나누게하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/236387

  •  04-07-2019
  •  | 
  •  

문제

제목이 매우 명확한 지 확실하지 않지만 기본적으로해야 할 일은 파일의 텍스트 줄을 읽고 8 개의 다른 문자열 변수로 나누는 것입니다. 각 라인은 동일한 순서 (제목, 저자, 가격 등)로 동일한 8 개의 청크를 갖습니다. 그래서 각 텍스트 라인마다 8 줄로 끝나고 싶습니다.

첫 번째 문제는 라인의 마지막 두 필드가 존재하거나 존재하지 않을 수도 있다는 것입니다. 따라서 StringTokenizer.hasmoretokens로 무언가를해야합니다. 그렇지 않으면 필드 7과 8이 없을 때 지저분하게 죽을 것입니다.

나는 루프를 위해 하나의 동안 그것을 좋아하지만, 필드의 순서가 무엇인지 루프에게 8 개 (또는 6) 문자열을 올바르게 채울 수있는 방법을 잘 모르겠다. 8 개의 중첩 if 문장을 사용하는 더 좋은 방법이 있다고 말 해주세요!

편집 : string.split 솔루션은 분명히 그것의 일부인 것처럼 보이므로 StringTokenizer 대신 사용하겠습니다. 그러나 나는 여전히 개별 문자열을 생성자에 공급하는 가장 좋은 방법이 확실하지 않습니다. 가장 좋은 방법은 클래스가 배열을 기대하고 생성자에서 이와 같은 일을하는 것입니다.

line[1] = isbn;
line[2] = title;
도움이 되었습니까?

해결책

가장 좋은 방법은 StringTokenizer를 전혀 사용하지 않지만 String 's를 사용하는 것입니다. 나뉘다 방법. 문자열 배열을 반환하고 길이를 얻을 수 있습니다.

파일의 각 줄에 대해 다음을 수행 할 수 있습니다.

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

tokens 이제 6-8 개의 문자열이 있습니다. 사용 tokens.length() 얼마나 많은지 알아 보려면 배열에서 객체를 만듭니다.

다른 팁

정규 표현은 방법입니다. 분할 방법을 사용하여 들어오는 문자열을 문자열 배열로 변환 할 수 있습니다.

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/string.html#split (java.lang.string)

캡처 그룹이있는 정기적 인 표현이 당신에게 효과가 있습니까? 표현식의 일부를 선택적으로 만들 수 있습니다.

데이터 라인 또는 세 가지가 도움이 될 수 있습니다.

우연히 CSV 또는 유사한 파일입니까? 그렇다면, 예를 들어 도움을 줄 라이브러리가 있습니다. 아파치 커먼즈 CSV (페이지의 대안에 링크). 파일의 각 줄에 대해 문자열 []를 얻을 수 있습니다. 배열 크기를 확인하여 어떤 선택 필드가 있는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top