2012-05-04 7 views
1

문자열이 있습니다 (예 : xyzabc_1_1).문자열의 마지막 문자를 조건부로 바꾸기

은 내가 마지막 문자가 _1 경우 첫 번째 테스트하려는 그렇다면, _01_1와 마지막 _1를 교체합니다. 문자열은 xyzabc_1_01_1이됩니다. 찾는

마지막 자리는 내가

str1.matches("^.*_\\d$") 

을 사용하고 _1입니다하지만 어떻게 _01_1와 마지막 발생을 교체하는, 즉이 두 번째 부분을 모르는 경우.

답변

4

문자열을 바꾸려면 부분 문자열을 잡고 새 접미사를 연결하면됩니다. 또한 정규 표현식 대신 endsWith을 사용할 수 있습니다. IMHO 더 읽기 쉽습니다.

public String replaceSuffix (String target, String suffix, String replacement) { 
    if (!target.endsWith(suffix)) { 
     return target; 
    } 

    String prefix = target.substring(0, target.length() - suffix.length()); 
    return prefix + replacement; 
} 

(특정 예를 들어)로 호출 :

String replaced = replaceSuffix("xyzabc_1_1", "_1", "_01_1"); 

에 따라

public String replaceSuffix (String target) { 
    if (!target.endsWith("_1")) { 
     return target; 
    } 

    return target.substring(0, target.length() - 2) + "_01_1"; 
} 

그리고 단지 그것의 재미를 위해

, 여기 교체 다른 것들에 대한 더 재사용이 가능한 버전입니다 예상되는 입력이 있으면 str에 null/empty/length 점검이 필요할 수도 있습니다.

+0

감사합니다 ....하지만 우리가 원하는 문자열이 무엇인지를 교체 할 경우 다음

str1.replaceAll("_(\\d)$", "_0$1_$1") 테스트입니다 '_1'일뿐만 아니라 _2 또는 _3과 같은 정수가 될 수 있습니다. – user1114509

+0

그건 다소 다른 질문입니다. 당신은 아마도 이것에 기반한 솔루션을 만들 수 있습니다. 다양한 방법이 있습니다. 어쩌면 컬렉션을 반복하고 각각을 대체 할 수 있습니다. 또는 가장 잘 작동하는 경우 정규 표현식을 사용할 수도 있습니다. 그것은 당신에게 달려 있습니다. –

0

오히려 전체 문자열을 새 문자열로 바꿉니다. '_01_1'을 연결하여 새 문자열을 만듭니다. 그런 다음 교체하십시오.

0

String str1 = "xyzabc_1"; 

    /* System.out.println(str1.matches("^.*_\\d$")); */ 

    try { 
     if (str1.matches("^.*_\\d$")) { 
      String cutted = str1.substring(str1.lastIndexOf("_"), 
        str1.length()); 
      str1 = str1.replaceAll(cutted, "_01" + cutted); // 
      System.out.println(str1); 
     } else { 

     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
1

이 참조를 백 replaceAll()을 사용하고, 간단한 한 줄입니다 ... 완료하지만 최적화가 필요합니다 :

String str2 = str1.replaceAll("_\\d$", "_01$0"); 

그것은 분명하지 년대 01가 기반으로하는 경우 1 또는 상수입니다. 202_2 될 것 인 경우, 즉 그 대신 이렇게 :

String str1 = "xyzabc_1_1"; 
String str2 = str1.replaceAll("_\\d$", "_01$0"); 
System.out.println(str2); 

출력 :

xyzabc_1_01_1 
관련 문제