공부함/JAVA Hard
[JAVA] 파일 이름 줄이기( substring, lastIndexOf , indexOf )
솔헬레나
2022. 9. 29. 23:12
< 목표 >
file 이름이 긴 경우 50자로 자르고 확장자를 뒤에 붙여준다.
< 조사 >
- substring() : 특정 위치부터 문자열 자르기
- {문자형}.substring({위치},{위치})
- return : String
- 특정 문자열부터 자르기
String targerStr = "pineapple";
targerStr.substring(4);
=> apple 가 출력된다. - 특정 순서까지 문자열 자르기
String targerStr = "pineapple";
targerStr.substring(2,6); //6-1한다
=> inea 가 출력된다.
- indexOf()
- {문자형}.IndexOf({대상문자},{특정위치:옵션})
- return : int
- 맨 오른쪽 끝에서부터 특정 문자열의 위치 찾기
String targerStr = "pineapples";
int point = targerStr.IndexOf("e", 5);
=> 9를 반환한다.
- lastIndexOf()
- {문자형}.lastIndexOf({대상문자})
- return : int
- 맨 오른쪽 끝에서부터 특정 문자열의 위치 찾기
String targerStr = "pineapple";
int point = targerStr.lastIndexOf("p");
=> 7을 반환한다.
- ArrayList.indexOf()
- {List}.indexOf({item})
- return : int & noData : -1
- 리스트 안에 item의 위치를 반환한다.
String[] fruitList = {"peach", "banana", "tomato", "kiwi"};
fruitList.indexOf("tomato");
=> 2를 반환한다
< 활용 >
public class mainRun {
public static void main(String[] args) {
/** 테스트 데이터 */
List<String> files = new ArrayList<>();
// 0- 정상데이터 ( 파일이름, 확장자 모두 50자 이내 ) : 그냥출력
files.add("fileNameTestList.xlsx");
// 1- 확장자 없음 + 이름짧음 : 그냥 출력
files.add("하나삼사오육칠팔구십kopkeo하나삼사오wfjhihewfio");
// 2- 확장자 없음 + 이름길다 : 이름만 50자
files.add("하나삼사오육칠팔구십wefopkpwefkopefw하나삼사오육칠팔구십kopkeo하나삼사오육칠팔구십" + "pefwiojhe=");
// 3- 파일 이름 10자 + 파일 확장자가 30자 이상 : 확장자 잘림
files.add("fileNameTestList.xlsx하나삼사오육칠팔구십1234567890하나삼사오육칠팔구십123");
// 4- 파일 이름 30자 + 파일 확장자가 30자 : 둘 다 잘린다
files.add("하나삼사오육칠팔구십1234567890하나삼사오육칠팔구십.xlsxxlsxlsxlsxxlsxlsxlsxxlsxls");
// 5- . 부터 시작하는 파일 이름
files.add(
".jhefwoiji9두일_삼사오육칠팔구십1234567890두일_삼사오두일_삼사오육칠팔구십1234567...");
// 6- 파일 이름 안에 .이 많음
files.add("efuio.h.e.f.o.h.u.e.f.w.!@#$%^&*(huiohefuoihiouefw.fewfewewf.fweewf.end");
// 7- 파일 확장자 뒤에 문자없음 ( 끝에 .만 )
files.add("하나삼사오육칠팔구십1234567890" + ".두일_삼사오육칠팔구십1234567890" + "삼일이_사오육칠팔구십1234567890" + "사일이삼_오육칠팔구십1234567890"
+ ".오일이삼사_육칠팔구십1234567890" + "육일이삼사오_칠팔구십1234567890" + "칠일이삼사오육_팔구십123456789.");
// 8- 유효 : 100자 넘는 파일이름
files.add("하나삼사오육칠팔구십1234567890" + "두일_삼사오육칠팔구십1234567890" + "삼일이_사오육칠팔구십1234567890" + "사일이삼_오육칠팔구십1234567890"
+ "오일이삼사_육칠팔구십1234567890" + "육일이삼사오_칠팔구십1234567890" + "칠일이삼사오육_팔구십1234567890.pptx");
/** 파일 이름 줄이기 실행 */
int testCnt = 0;
int FILE_NAME_SIZE = 50;
for (String fileName : files) {
System.out.println("!testCnt : " + testCnt++);
System.out.println("targetName : " + fileName);
System.out.println("targetName size : " + fileName.length());
// file 이름이 긴 경우 50자로 자른다. (확장자 포함 50자)
if (fileName.length() > FILE_NAME_SIZE) {
int extensionPoint = fileName.lastIndexOf(".");
String extensionName = "";
if (extensionPoint > 0) {
extensionName = fileName.substring(extensionPoint);
}
System.out.println("extensionName : " + extensionName);
System.out.println("extensionName size : " + extensionName.length());
String newFileName = fileName.substring(1, FILE_NAME_SIZE - extensionName.length());
System.out.println("newFileName : " + newFileName);
System.out.println("newFileName size : " + newFileName.length());
fileName = splitedFileName + extensionName;
}
System.out.println("fileName : " + fileName);
System.out.println("fileName size : " + fileName.length());
System.out.println("==================");
}
}
}
< 하나 더 .. >