2014-10-23 2 views
0
내가 자동으로 파일의 이름을 변경하는 코드를 다음 사용하고

이는 내가하는 데 문제가있어 내가 적응하는 방법을 알고하지 않는 파일 이름을 다음과 같이 주로 작동정규식 기능 이름 바꾸기 파일 문제

public static String getNewNameForCopyFile(final String originalName, final boolean firstCall) { 
    if (firstCall) { 
     final Pattern p = Pattern.compile("(.*?)(\\..*)?"); 
     final Matcher m = p.matcher(originalName); 
     if (m.matches()) { //group 1 is the name, group 2 is the extension 
      String name = m.group(1); 
      String extension = m.group(2); 
      if (extension == null) { 
       extension = ""; 
      } 
      return name + "-Copy1" + extension; 
     } else { 
      throw new IllegalArgumentException(); 
     } 
    } else { 
     final Pattern p = Pattern.compile("(.*?)(-Copy(\\d+))?(\\..*)?"); 
     final Matcher m = p.matcher(originalName); 
     if (m.matches()) { //group 1 is the prefix, group 2 is the number, group 3 is the suffix 
      String prefix = m.group(1); 
      String numberMatch = m.group(3); 
      String suffix = m.group(4); 
      return prefix + "-Copy" + (numberMatch == null ? 1 : (Integer.parseInt(numberMatch) + 1)) + (suffix == null ? "" : suffix); 
     } else { 
      throw new IllegalArgumentException(); 
     } 
    } 
} 

을 내 코드 : test.abc.txt 이름이 바뀐 파일은 'test-Copy1.abc.txt'가되지만 'test.abc-Copy1.txt'여야합니다.

내 방법으로 어떻게 이것을 수행 할 수 있습니까?

+0

'return prefix + "." + suffix + "-Copy"+ numberMatch + ".txt"' – msrd0

답변

0

, 당신은 파일 이름의 마지막 점 ('.') 전에 사본 번호를 삽입 할을 어떤 것이 있으면 대신 첫 번째 점 앞에 삽입됩니다. 이것은 첫 번째 그룹에 마지 못해 한정 기호를 사용하고 두 번째 그룹이 여러 개의 점을 포함하는 파일 이름 꼬리와 일치 할 수 있기 때문에 발생합니다. 나는 당신이 다음과 같이 더 잘할 것이라고 생각합니다 :

두번째 그룹은 존재한다면, 두 번째 그룹은 점으로 시작하지만 다른 점들은 포함 할 수 없습니다.

+0

저는 이것이 모든 경우를 다루는 것으로 믿습니다 - 0 점, 1 점 또는 여러 점. –

+0

이것은 작동하는 것처럼 보입니다. 테스트를 계속 진행하면 모든 테스트가 통과 된 후에 대답을 받아 들일 것입니다. 감사합니다! – David

0

나는 당신이하려고하는 것이 마지막 '을 찾으라는 것'이라고 생각합니다. 이름에서, 맞습니까? 그럴 경우 욕심이 일치하는. * (가능하면 일치하는) *.

final Pattern p = Pattern.compile("(.*)(\\..*)") 

당신은 별도로 어떤 점의 경우 처리해야합니다 내가 제대로 이해하면

if (originalName.indexOf('.') == -1) 
    return originalName + "-Copy1" 
Your other code 
+0

원래 코드가 처리하는 파일 이름에 점이 전혀없는 경우에는 사용되지 않습니다. 그래디언트 나 마지 못해 한정어에 대한 관찰은 훌륭하다. –

+0

점이없는 대소 문자를 처리하지 못한다는 것을 알았습니다. 이 사건을 별도로 처리해야합니다. if (originalName.indexOf ('.') == -1) 다르게 처리해야합니다. – Maxaon3000