2013-06-14 2 views
0

나는이/s 사이에 다른 숫자 앞에 숫자를 추가 하시겠습니까?

/files/etc/hosts/2/ipaddr 
/files/etc/hosts/2/canonical 
/files/etc/hosts/2/alias[1] 
/files/etc/hosts/3/ipaddr 
/files/etc/hosts/3/canonical 
/files/etc/hosts/3/alias[1] 
/files/etc/hosts/4/ipaddr 
/files/etc/hosts/4/canonical 
/files/etc/hosts/4/alias[1] 

내가 // 사이에 앉아있는 자리 앞에 0을 추가하고 싶은처럼 보이는 문자열의 무리가 있습니다. 추가 후 결과는 다음과 같아야합니다.

/files/etc/hosts/02/ipaddr 
/files/etc/hosts/02/canonical 
/files/etc/hosts/02/alias[1] 
/files/etc/hosts/03/ipaddr 
/files/etc/hosts/03/canonical 
/files/etc/hosts/03/alias[1] 
/files/etc/hosts/04/ipaddr 
/files/etc/hosts/04/canonical 
/files/etc/hosts/04/alias[1] 

나는 검색을 위해 간단한 정규식을 사용해야한다고 확신합니다. 나는 /\d*/ 충분해야한다고 생각하지만 숫자 0을 삽입하는 문자열을 수정하는 방법을 잘 모르겠습니다. 누군가가 내게 몇 가지 조언을 줄 수 있습니까?

+0

[참조하십시오] (http://stackoverflow.com/a/13503345/2027196)을 참조하십시오. 짧은 대답 - StringBuilder를 사용하십시오. 정규식을 제쳐두고, , 그게 효과가 있니? – John

답변

5

사용 :

newString = string.replaceAll("/(\\d)(?=/)", "/0$1"); 

\\d은 하나의 자리입니다. 하나 이상의 숫자에 \\d+을 자유롭게 사용하십시오.

$1은 괄호 (몇 가지 예외가 있음)에 나타나는 첫 번째 항목과 일치하는 문자열 부분을 의미하므로 (\\d)입니다.

/files/etc/hosts/3/5/canonical 

/files/etc/hosts/03/5/canonical 

대신

/files/etc/hosts/03/05/canonical 

(3과 5 사이의 / 될 것입니다 단지 /(\\d)/ 그렇지 않으면 때문에

당신은 대신보기 미리 (?=...)을 사용할 필요가 일치하는 동안 소모됩니다. 그는 look-ahead를 사용하지 않는다면 3, 따라서 5에서 일치하지 않을 것이다.

위의 문자열을 입력 할 수없는 경우 문제가되지 않으며 간단히 /(\\d)/을 사용할 수 있습니다.

Java regex reference. 한 문자열을 다른 문자열에 삽입하는 방법은

+2

인접한 가능한 일치를 사용하지 않기 위해 미리보기를 사용하는 경우 +1 – Bohemian

+0

대단히 감사합니다! 나는 $ 1에 대해 몰랐다. 매일 새로운 것을 배웠습니다. – beyonddc

관련 문제