2010-05-07 3 views
0
"C://test/test/test.png" -> blub 

    blub = blub.Replace(@"/", @"\"); 

result = "C:\\\\test\\test\\test.png" 

어떻게 의미가 있습니까? 그것은 하나를/두 가지로 대체합니다. \string.replace가 심각하게 깨졌습니다.

?

+4

으로 표시됩니다. 오랫동안 머물러보고 배우고 가르쳐 주시길 바랍니다 :) 그리고 힌트 : 이와 같은 "버그"를 발견하면, 100 번 (적어도)에서 99 번, 결함이있는 귀하의 코드 또는 가정이라고 가정하십시오. 이 경우, 문자열 바꾸기 메소드가 실제로 지시 한 것처럼 결함이있는 경우, 오래 전에 라이브러리에서 고정되거나 잡아 당겨집니다. –

+1

아주 단순한 함수가 실제로 망가 졌다면, 당신이 정말로 그것을 알아 차릴 것이라고 당신이 정말로 믿는가? – Quagmire

+0

아, 그리고 "천재"? String.Replace는 C#의 일부가 아닙니다. 그것은 .NET Framework의 일부입니다. –

답변

9

실제로 일하고있어 :

string blub = "C://test/test/test.png"; 
string blub2 = blub.Replace(@"/", @"\"); 

Console.WriteLine(blub); 
Console.WriteLine(blub2); 

출력 :

C://test/test/test.png 
C:\\test\test\test.png 

하지만 디버거에서 문자열을 보는 것은 당신이 설명하는 효과를 보여 않습니다 (당신이없이 코드에서 문자열 리터럴을 작성하는 방법이다 @).

이전에 알아 차 렸지만 왜 디버거가이 형식을 선택했는지 알 수 없었습니다.

+0

디버거가이 형식을 선택하지 않았기 때문에 모호한 결과가 항상 나타납니다. (이스케이프 문자를 사용하지 않으면 디버거에서 따옴표가 포함 된 문자열을 어떻게 출력합니까?). –

+0

그 다음엔 말이 되네요. – Paolo

+0

디버거가있는 팁을 보내 주셔서 감사합니다. – Blub

1

"이스케이프 문자"를 찾으십시오.

+1

OP가 @를 이미 올바르게 사용 중입니다. –

3

C#의 \ 문자는 이스케이프 문자이므로 \ 문자로 사용하려면 두 문자가 필요합니다. 그렇지 않으면 다음 문자가 특수하게 처리됩니다 (새 라인 등).

는 문자 \는 문자열 리터럴에 후 문자의 의미를 변경하는 특수 문자입니다 What character escape sequences are available? (C#)

2

참조하십시오. 따라서 \을 참조 할 때 탈출해야합니다 (\\).

8

아니요.

C# 규칙에 따라 올바른 형식의 문자열이 표시됩니다. 표시되는 출력에 접두사로 @ 문자가없는 것처럼 표시되므로 모든 백 슬래시가 두 배가됩니다. 처음에 문자열을 원한다면 무엇을 써야할까요?

새 콘솔 앱을 만들고 결과를 콘솔에 쓰면 원하는대로 문자열이 표시됩니다.

그래서 이것은 문자열을 보는 방법의 인공물 일뿐입니다 (나는 디버거라고 가정 함). 당신은 당신이 뭔가에 문제가 찾을 때마다

0

당신은 그 같은 말을하기 전에 두 번 생각해야한다 ....

하려면 string.replace 기능은 .... 오랜 시간 동안 주변되었습니다 기본 기능입니다 이런 식으로, 아마 깨진 기능이 아니지만 그것을 이해하거나 사용하십시오.

1

그게해야 할 일. "\\"은 (는)와 동일합니다. @"\"

"\"는 이스케이프 문자입니다. 문자열 앞의 축 어적 표시기 "@"가 없으면 하나의 \는 "\\"

관련 문제