공부함/JAVA Hard

[JAVA] 파일 이름 줄이기( substring, lastIndexOf , indexOf )

솔헬레나 2022. 9. 29. 23:12

< 목표 >

file 이름이 긴 경우 50자로 자르고 확장자를 뒤에 붙여준다.

 

< 조사 > 

  1. substring() : 특정 위치부터 문자열 자르기
    • {문자형}.substring({위치},{위치}) 
    • return : String
    • 특정 문자열부터 자르기
      String targerStr = "pineapple";
      targerStr.substring(4); 
      => apple 가 출력된다.
    • 특정 순서까지 문자열 자르기
      String targerStr = "pineapple";
      targerStr.substring(2,6);  //6-1한다
      => inea 가 출력된다.
  2. indexOf()
    • {문자형}.IndexOf({대상문자},{특정위치:옵션})
    • return : int
    • 맨 오른쪽 끝에서부터 특정 문자열의 위치 찾기
      String targerStr = "pineapples";
      int point = targerStr.IndexOf("e", 5);
      => 9를 반환한다.
  3. lastIndexOf() 
    • {문자형}.lastIndexOf({대상문자})
    • return : int
    • 맨 오른쪽 끝에서부터 특정 문자열의 위치 찾기
      String targerStr = "pineapple";
      int point = targerStr.lastIndexOf("p");
      => 7을 반환한다.
  4. 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("==================");
    }
}
}

 

 

 

< 하나 더 .. >