2009-03-12 8 views
3

메서드에서 문자열을 가져 오는 프로그램이 있습니다. 특정 위치에서 해당 문자열에 문자열 값을 삽입하는 방법을 알고 싶습니다. 예를 들어특정 위치에서 문자열에 값을 삽입하는 방법 C#

:

여기
mystring = "column1 in('a','b')column2 in('c','d')column3 in('e','f')"; 

, 어떻게 내가 문자열 값 "과"을 삽입합니다 mystring의 문자 ')'나타날 때마다 후?

추신. 가능한 경우 끝에 삽입하지 않는 방법도 포함하십시오.

+0

mystring = "(a ','b ')의 column1 ('c ','d ')의 column2 ('e ','f ')'의 column3? – Kev

+0

SQL 주입에 대해 알려주십시오. 부디. –

+0

SQL 주입에 대해 알고 있습니다. 여기, 목록 상자에서 데이터를 가져 오는 중이 지. 그래서 실제로 SQL 삽입의 기회는 없다 ... 맞습니까? – zohair

답변

2

.. : 당신이 의미하는 경우, 내가 데려 갈거야

"column1 in('a','b') and column2 in('c','d') and column3 in('e','f')" 
+0

TrimEnd()에주의를 기울여야한다. 끝 부분에 ANY '', 'A', 'N'또는 'D' 과". – Lucas

+0

예 질문의 경우에는 효과가 있다고 언급 했어야하지만, 문자열 끝 부분에 삭제 의도가없는 문자가 들어있는 경우 의도하지 않은 부작용이있을 수 있습니다. –

2

문자열은 변경할 수 없으므로 문자열의 값을 '변경'할 수 없습니다. 문자열에 적용하려는 각 수정은 문자열의 새 인스턴스로 연결됩니다.

당신은 당신이 원하는 것을 얻을 수있는 방법 어쩌면이다 : 어쨌든 ...

string s = " x in (a, b) y in (c, d) z in (e , f)"; 

string[] parts = s.Split (')'); 

StringBuilder result = new StringBuilder(); 

foreach(string part in parts) 
{ 
    result.Append (part + ") and "); 
} 
Console.WriteLine (result.ToString()); 

을하지만 어쩌면 더 나은 솔루션이있다

, 당신의 일부처럼 보이는 문자열을 (수신 온 방법 where 문을 SQL 문으로 사용)?

5

아마 가장 간단한 :

string mystring = "column1 in('a','b')column2 in('c','d')column3 in('e','f')"; 
mystring = mystring.Replace(")", ") and ").TrimEnd(" and".ToCharArray()); 

이 결과 당신이 교체로 달성 할 수
mystring = mystring.Replace(")", ") and "); 
mystring = mystring.Substring(0, mystring.Length - " and ".Length); 
+0

나는 그것을 생각하지 않았다 ... 8) 7 –

2

당신의 문자 그대로 그대로이며, 오는대로 :

mystring = "column1 in('a','b')column2 in('c','d')column3 in('e','f')" 

그런 다음 당신은 다만 수 :

mystring = 
    "column1 in('a','b') and column2 in('c','d') and column3 in('e','f')" 

이것은 당신이 뒤에 "와"하지 않으 추정된다

mystring = mystring.Replace(")c", ") and c"); 

이 어떤 결과 것입니다.

0
System.Text.RegularExpressions.Regex.Replace(
    mystring, "\\)(?=.+$)", ") and "); 

정규식의 .+$ 부는 폐쇄 괄호 줄 끝에 아님을 보장한다. 이 작업을 자주 수행하려는 경우 패턴에 대해 Regex 개체를 만들고 유지하는 것이 좋습니다.

// Do this once somewhere: 
System.Text.RegularExpressions.Regex insertAndPattern = 
    new System.Text.RegularExpressions.Regex("\\)(?=.+$)"); 

// And later: 
insertAndPattern.Replace(mystring, ") and "); 

편집 : 그냥 바보라는 것을 깨달았습니다. 위의 패턴을 "\\).+$"에서 "\\)(?=.+$)"으로 수정하여 .+$ 부분이 포함되어 있지 않으므로 교체됩니다.

+0

죄송합니다 ... 정규식이 무엇인지, 그리고 무엇을하는지 전혀 모르겠다. – zohair

+0

그래서 정규식이 무엇인지 모르기 때문에 - 그의 코멘트를 그냥 써야할까요? 와우. – IEnumerator

관련 문제