String Replace 질문드립니다

,R,R,O,O,OF,R,R,R,R,R,O,OF,R,R,O,O,OF,O,OF,R,R,R,R,O,OF,O,R,R,R,R

이렇게 생긴 String 데이터에서

str = str.Replace(",R," , “M”) 이렇게 assign 액티비티를 이용하여 작업했으나

결과는
,M,R,O,O,OF,M,R,M,R,M,O,OF,M,R,O,O,OF,O,OF,M,R,M,R,O,OF,O,M,R,M,R

이렇게 나왔습니다.

replace 함수를 이용했으나 왜 어떠한 값은 변경이 되고 어떤 값은 변경이 안되는 걸까요?

그리고 전체 데이터를 변경하려면 어떻게 해야 할까요?

참고로, 이 string 값은 datatable에서 string으로 변경한 값입니다. (Output Data Table 액티비티 활용)

*개인정보가 포함되어 string 값 전체 공개 안되는점 이해 부탁드립니다.

,R,이 M으로 바뀌면 맨 앞부분이 MR이 될거같은데요?
,R,R,에서 앞에 ,R,이 M으로 바뀌고, 그럼 MR,이 되므로, 뒤에 R이 ,R,이라는 조건에 맞지 않게 되서 패스하게 되는 겁니다.

str = str.Replace(“R”, “M”) 으로 시도해 보시겠어요

아 오타가 있습니다.
str = str.Replace(",R," , “,M,”)

이게 맞습니다.
R을 바로 M으로 못바꾸는 이유는 Ri등의 여러 코드가 있는데 다른 문자에서 변경(Ri -> Mi)이 일어나면 안되기 때문에 ,와 ,까지 포함하여 정확한 R값만 M으로 바꾸기 위해 콤마를 포함하였습니다.
그런데 어느부분은 R에서 M으로 바뀌고 어디는 안바뀌고 있어서 질문 드립니다ㅜㅜ

아 그리고 위 string 값은 제가 임의로 적은 것이고
문제의 요지는 ,R,값이 어느부분은 ,M,으로 바뀌지만 어느부분은 안바뀐다는 것입니다.

Replace에서 ,R,에서 ,M,으로 변경했다면 아래 결과에 ,R,이 없어야 되는거 아닌가요ㅜㅜ

str = ,R,R, 로 간단히 놓고 ,R,을 단순히 찾기만 한다면 앞과 뒤 2개가 매칭됩니다.

하지만 Replace를 하기위해서 ,R,을 검색한다고 한다면, 가운데 ‘,’ 는 앞의 ,R,을 Replace하는 과정에서 사라질 것이기 때문에 가운데 ','를 앞뒤로 중복해서 선택하지 않는다는거겠죠.

물론 Replace 이후에 다시 ','가 복구되지만 문자열을 앞에서부터 따라가면서 계속 바꾸는게 아니라 전체 문자열에서 검색을 해서 검색된 부분을 한번에 바꾸기 때문에 위의 결과가 나오는게 아닐까 싶습니다. 실제 바뀐 결과를 보면 R이 2개 붙으면 앞에만 바뀌고 뒤에가 안바뀌는걸 볼수있죠

실제 값들이 어떤지는 몰라서 “R,” 을 Replace 하는것으로도 힘들다면
Datatable 그상태에서 For each row로 작업해 나가시는게 더 나으실것 같습니다

1 Like