Seoul.txt, NewYork.txt 파일 생성하고 내용을 넣기
기반 스트림 FileReader → 단 인코딩에 대한 단점이 존재한다
실행 결과______
인코딩 설정을 위한 해결 방안
도전 학습 - 가장 많이 사용된 단어 찾기(공백 기준)
파일에는 임의의 긴 문장이 저장되어 있으며 파일 스트림을 활용해서
데이터를 읽고 코드상에서 프로그램을 만들어 보자.
▶ Java의 split 메서드는 String 클래스의 메서드로, 문자열을 특정 패턴 또는 정규 표현식을 기준으로 분리하여 문자열 배열(String[])로 반환합니다.
[^가-힣A-Za-z]+의 의미:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
public class WordFinder {
public static void main(String[] args) {
String fileName = "Seoul.txt";
try (FileInputStream fis = new FileInputStream(fileName);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr)) {
// 단어 빈도를 저장하기 위한 HashMap 생성
Map<String, Integer> wordCountMap = new HashMap<>();
String line;
while ((line = br.readLine()) != null) {
String[] words = line.split("\\s+");
// 분리된 단어들을 반복 처리
for (String word : words) {
//System.out.println("word : " + word);
// 빈 문자열이 아닐 경우에만 처리
if (!word.isEmpty()) {
// getOrDefault - 분리한 word 단어가 이미 map 구조에 존재한다면 현재
// 값을 가져오고 없다면 0을 반환 합니다
// wordCountMap Key - String
// wordCountMap value - Integer
wordCountMap.put(word, wordCountMap.getOrDefault(word, 0) + 1); // 데이터 넣는 거 -> put
}
}
} // end of while
String mostCommon = null;
int maxCount = 0;
for (Map.Entry<String, Integer> entry : wordCountMap.entrySet()) {
if (entry.getValue() > maxCount) {
mostCommon = entry.getKey();
maxCount = entry.getValue();
}
}
System.out.println("가장 많이 사용된 단어 : " + mostCommon + " , " + maxCount + "회");
} catch (Exception e) {
e.printStackTrace();
}
}// end of main
}// end of class
실행 결과_____
[JAVA] 기초 - 생성자(constructor) (0) | 2024.05.20 |
---|---|
[JAVA] 기초 - RunTime Data Area (0) | 2024.05.20 |
[JAVA] 문자 기반 스트림 (0) | 2024.05.17 |
[JAVA] 파일 Copy (바이트기반 입/출력) (0) | 2024.05.17 |
[JAVA] 파일 출력 스트림(바이트 기반) (0) | 2024.05.17 |