2011-05-08 2 views
-1

: -문자열의 정의되지 않은 길이에서 부분 문자열을 추출하는 방법은 무엇입니까? 이러한 문자열을 하위 문자열

1. ZZ111122 
2. ZZZZ222111 
3. ZZZZZZZ333 
4. ZZZ111333 

내가 문자열의 이러한 종류가있다. 이 값은 항상 Z로 시작합니다. 그리고 Z 이후에는 항상 1 또는 2 또는 3입니다. 그러나 문자열에서 Z의 수를 알지 못합니다. 그러면 문자열에서 Z를 모두 추출하는 방법은 무엇입니까?

+0

당신은 아마 "제거"의미합니까? – tvanfosson

+1

예상되는 결과는 무엇입니까? 예를 들어 1 행 : "ZZ"와 같은 문자열을 원하십니까? 또는 "111122"일 수 있습니까? –

답변

0
String test = "ZZ111122"; 
String zOnly = test.Substring(0, test.IndexOfAny("123".ToCharArray())); 

IndexOfAny()을 활용하십시오. 나는 당신이 오직 Z의 왼쪽 ("문자열에서 모든 Z를 추출")을 원한다고 가정하고있다.

+1

주의 :'IndexOf'가 텍스트 내에서 단일 문자를 검색하는 동안'IndexOfAny'는 텍스트 내에서 여러 문자를 검색합니다. 이는 확실히 성능이 떨어집니다. 몇 번에 걸쳐 매우 유용하지만 OP가 필요하지는 않습니다. –

+0

@ErickPetru : True이지만 OP가 성능 요구 사항을 지정하지 않았습니다. –

+1

물론 OP는 성능이 좋지 않아 답변을 선택합니다. 실제로'IndexOfAny'는 문자열 메소드이므로 코드가 다음과 같아야하기 때문에 완전히 작동하지 않는 답을 선택합니다 :'String zOnly = test.Substring (0, test.IndexOfAny ("123".ToCharArray())))); 마지막으로, 수용된 대답은 ** 0 ** 표를 갖는다. 그것을 읽는 것은 어떻습니까? [대답을 받아들이는 방법은 무엇입니까?] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

0

이것은 어렵지 않습니다. 텍스트를 줄 단위로 처리하는 것이 좋습니다.

문자열을 문자 단위로 반복 할 수 있습니다. 정규식을 사용할 수 있습니다. 또는 내 sscanf() replacement class for C#을 사용할 수도 있습니다.

4

내가 제대로 이해하는지 모르겠다. 당신이 "ZZZZ222111"가하고 싶은 경우에만 "222111"을 수행

만 "ZZZZ"를 원하는 경우
string test = "ZZZZ222111"; 
test = test.Substring(test.LastIndexOf("Z") + 1); 

이 그것을 수행

string test = "ZZZZ222111"; 
test = test.Substring(0, test.LastIndexOf("Z")); 

두 가지 방법이 매우 간단합니다. 루프 나 정규식이 필요 없습니다.

+0

+1 동시에 더 완전하고 쉬운 솔루션을 원합니다. –

1

사용 String.Trim 기능 : 추출하여

ZeroZValue = stringValue.Trim('Z'); 
+1

'Trim()'은 문자열의 시작과 끝 모두에서 문자를 제거합니다. 대신'TrimStart()'를 제안 할 것입니다. – svick

+0

@svick : 그는 z 글자 뒤에 1, 2 또는 3이 없다는 것을 분명히 선언했습니다. –

+0

예,하지만 TrimStart()를 사용하면 의도가 명확 해지고 더 빨라질 수 있습니다. – svick

0
int start = someString.IndexOf("Z"); 
int end = someString.LastIndexOf("Z"); 
someString.Substring(start , end - start); 
관련 문제