Sunday, December 17, 2006
Java/자바] 문자열 검색, 문자 찾기, 지정한 파일 속에서; Find String (GREP) Example
유닉스 문자열 찾기 명령어인 grep 과 비슷하게 문자열을 찾는 프로그램입니다.
물론 가장 간단하고 기초적인 것이고, grep 처럼 강력한 기능은 전혀 없습니다. 특히 와일드 카드가 되지 않는 제한이 있습니다.
다만 "정규식 검색"을 지원합니다.
그리고 검색의 편의를 위해, 대소문자 구분 없이 찾습니다. 또한 "찾는 문자열"이, 문장의 어디에 있든 항상 찾도록 했습니다. 이것이 오히려 불편할 수도 있는데, 이때는 소스 속의 정규식 처리 루틴만 약간 수정하면 됩니다.
파일명: Foo.java
테스트용으로 쓸 파일: 0.txt
컴파일 및 실행 결과:
0.txt 라는 파일에서, goo 라는 문자열이 포함된 모든 행을, 대소문자 구분없이, 찾아서 화면에 출력했습니다.
▶▶ Java/자바] 문자열 치환, 바꾸기, 모두 바꾸기 - String Replace All
물론 가장 간단하고 기초적인 것이고, grep 처럼 강력한 기능은 전혀 없습니다. 특히 와일드 카드가 되지 않는 제한이 있습니다.
다만 "정규식 검색"을 지원합니다.
그리고 검색의 편의를 위해, 대소문자 구분 없이 찾습니다. 또한 "찾는 문자열"이, 문장의 어디에 있든 항상 찾도록 했습니다. 이것이 오히려 불편할 수도 있는데, 이때는 소스 속의 정규식 처리 루틴만 약간 수정하면 됩니다.
자바: 텍스트 파일 속에서, 문자열 찾기/검색 소스 코드
파일명: Foo.java
import java.io.*;
import java.util.regex.*;
class Foo {
public static void main(String[] args) {
if (args.length != 2) { // args.length 는 옵션 개수
System.err.println("사용법: java Foo <찾을 문자열(대소문자 구분 없음)> <특정 파일명>");
System.exit(1); // 읽을 파일명을 주지 않았을 때는 종료
}
// (?i) <- "찾을 문자열"에 대소문자 구분을 없애고
// .* <- 문자열이 행의 어디에 있든지 찾을 수 있게
String findStr = "(?i).*" + args[0] + ".*";
int lineNumber = 1; // 행 번호
try {
////////////////////////////////////////////////////////////////
BufferedReader in = new BufferedReader(new FileReader(args[1]));
String s;
while ((s = in.readLine()) != null) {
if (s.matches(findStr))
System.out.format("%3d: %s%n", lineNumber, s);
lineNumber++; // 행 번호 증가
}
in.close();
////////////////////////////////////////////////////////////////
} catch (IOException e) {
System.err.println(e); // 에러가 있다면 메시지 출력
System.exit(1);
} catch (PatternSyntaxException e) { // 정규식에 에러가 있다면
System.err.println(e);
System.exit(1);
}
}
}
import java.util.regex.*;
class Foo {
public static void main(String[] args) {
if (args.length != 2) { // args.length 는 옵션 개수
System.err.println("사용법: java Foo <찾을 문자열(대소문자 구분 없음)> <특정 파일명>");
System.exit(1); // 읽을 파일명을 주지 않았을 때는 종료
}
// (?i) <- "찾을 문자열"에 대소문자 구분을 없애고
// .* <- 문자열이 행의 어디에 있든지 찾을 수 있게
String findStr = "(?i).*" + args[0] + ".*";
int lineNumber = 1; // 행 번호
try {
////////////////////////////////////////////////////////////////
BufferedReader in = new BufferedReader(new FileReader(args[1]));
String s;
while ((s = in.readLine()) != null) {
if (s.matches(findStr))
System.out.format("%3d: %s%n", lineNumber, s);
lineNumber++; // 행 번호 증가
}
in.close();
////////////////////////////////////////////////////////////////
} catch (IOException e) {
System.err.println(e); // 에러가 있다면 메시지 출력
System.exit(1);
} catch (PatternSyntaxException e) { // 정규식에 에러가 있다면
System.err.println(e);
System.exit(1);
}
}
}
테스트용으로 쓸 파일: 0.txt
google
Google
Googlegoogle
GOOGLEOOOOOOO
bar
barGOOGLE
bargooglebar
Googlegoogle
GOOGLEOOOOOOO
bar
barGOOGLE
bargooglebar
컴파일 및 실행 결과:
D:\Z>javac Foo.java
D:\Z>java Foo
사용법: java Foo <찾을 문자열(대소문자 구분 없음)> <특정 파일명>
D:\Z>java Foo goo 0.txt
1: google
3: Google
5: Googlegoogle
7: GOOGLEOOOOOOO
11: barGOOGLE
13: bargooglebar
D:\Z>
D:\Z>java Foo
사용법: java Foo <찾을 문자열(대소문자 구분 없음)> <특정 파일명>
D:\Z>java Foo goo 0.txt
1: google
3: Google
5: Googlegoogle
7: GOOGLEOOOOOOO
11: barGOOGLE
13: bargooglebar
D:\Z>
0.txt 라는 파일에서, goo 라는 문자열이 포함된 모든 행을, 대소문자 구분없이, 찾아서 화면에 출력했습니다.
▶▶ Java/자바] 문자열 치환, 바꾸기, 모두 바꾸기 - String Replace All
tag: java
자바 | Java
tag: regex
정규식 | 정규표현식 | Regex | Regular Expression
<< Home