텍스트 파일의 특정 텍스트 줄을 검색하려고합니다. 찾고자하는 텍스트가 특정 라인에 있다면, 그 라인에 더 많은 내용을 읽고 싶습니다.특정 줄의 텍스트 파일 검색
지금까지 내가 찾고있는 태그가 3 개 있습니다.
@public
@private
@virtual
나는 줄에 다음 중 하나를 찾을 경우, 나는이 같은 라인을 가질 수있다 예를 들어, 그래서 다음에 오는 것을 읽고 싶은 : 내가 태그 내가하다고 판단되면
@public double getHeight();
을 발견되면 @public
다음 나는 세미콜론에 도달 할 때까지 공백 뒤에 다음과 같은 부분을 가져 가야합니다. 문제는, 실제로는 꽤 이상하게 보이지는 않지만 대용량 파일이나 행의 여러 파일에 대해 장기적으로 좋지 않은 것 같은 charAt(..)
을 과도하게 사용하지 않으면 효율적인 방법을 생각할 수 없다는 것입니다 .
저는 현재 어떻게 할 수 있는지 이해할 수 없으므로이 문제를 효율적으로 해결하는 데 도움을 드리고 싶습니다. 코드 자체는 헤더 파일을 나중에 생성하기 위해 C++ 파일의 주석을 구문 분석하는 데 사용됩니다. 의사 코드 부분은 내가 붙어있는 곳입니다. 어떤 사람들은 BufferedReader를 제안하고, 다른 사람들은 Scanner라고합니다. BufferedReader를 대체하는 것으로 보이는 Scanner와 함께갔습니다.
public void run() {
Scanner scanner = null;
String filename, path;
StringBuilder puBuilder, prBuilder, viBuilder;
puBuilder = new StringBuilder();
prBuilder = new StringBuilder();
viBuilder = new StringBuilder();
for(File f : files) {
try {
filename = f.getName();
path = f.getCanonicalPath();
scanner = new Scanner(new FileReader(f));
} catch (FileNotFoundException ex) {
System.out.println("FileNotFoundException: " + ex.getMessage());
} catch (IOException ex) {
System.out.println("IOException: " + ex.getMessage());
}
String line;
while((line = scanner.nextLine()) != null) {
/**
* Pseudo Code
* if @public then
* puBuilder.append(line.substring(after white space)
* + line.substring(until and including the semicolon);
*/
}
}
}
한 번에 한 줄씩 읽는 것 외에 다른 작업을 수행하려는 경우 스캐너를 사용하는 것이 좋습니다. 귀하의 경우, 한 번에 한 단어를 읽을 수있는 것이 유용 할 것이라고 생각합니다. 즉, 'Scanner.next()'입니다. 그러면 주석이 그 다음 단어와 같은 줄에있을 필요는 없습니다. –
'charAt'? 'indexOf' (';'검색을위한)와'substring'은 여러분이 필요로하는 모든 String 메소드입니다. 또한 이것은 숙제 나 현실 세계를위한 것입니까? 실제 파싱은 그것보다 훨씬 복잡하기 때문에 ('@ virtual' 다음에 새로운 라인이 생기게됩니까?) – SJuan76
@ SJuan76 이것은 취미 프로젝트입니다. – OmniOwl