2012-03-29 5 views
2

이 문제에 대한 좋은 해결책을 찾을 수 없습니다. 나는 잃어버린 장비 나 도난당한 장비에 대한 보고서를 받아 들여야한다. 나는 양식의 나머지 부분을 통해 string.IndexOf 기능을 사용 해왔고 꽤 잘 작동합니다. 이 문제는 장치를 분실했거나 도난당한 경우 표시됩니다.C# - 문자열 검색

예 :

? "분실 또는 도난 분실"

내가이 글을 읽을 수 있어야합니다 "? 분실 또는 도난 도난"

하지만 난 string.IndexOf(@"Lost")을 수행 할 때 문제가 있기 때문에 언제나 길을 잃을 것입니다.

불행히도 양식 자체를 변경할 수는 없으며 제출 방법의 특성으로 인해 처음 15 자 정도의 문자를 두 번 쓰면 코드를 작성할 수 없습니다. 어떤 경우에는 소수입니다.

나는 것 정말 첫 번째 결과가 발견 된 후 로직의 모습 때문에 나 문자열을 검색 할 수 계속할 수 있도록 할 C#에서 뭔가 같은 : 여기에 옵션의

string my_string = "Lost or Stolen? Stolen"; 

searchFor(@"Stolen" in my_string) 
{ 
     Found Stolen; 
     Does it have "or " infront of it? yes; 
     ignore and keep searching; 
     Found Stolen again; 
     return "Equipment stolen"; 
} 
+2

정규 표현식? –

+2

항상 물음표가 하나 있습니까? 그걸로 나눠. – Andre

+0

'나는 문자열의 나머지 부분을 통해 string.IndexOf 함수를 사용하고 있습니다. 아주 잘 작동합니다. '어떤 종류의 형식이 우리가 여기서 이야기하고 있습니까? –

답변

3

커플. 당신은 공간의 마지막 인덱스에 대한보고 문자열의 나머지 걸릴 수 :

string input = "Lost or Stolen? Stolen"; 
int lastSpaceIndex = input.LastIndexOf(' '); 
string result = input.Substring(lastSpaceIndex + 1); 
Console.WriteLine(result); 

을 또는 당신이 그것을 분할하고 마지막 단어 걸릴 수 :

string input = "Lost or Stolen? Lost"; 
string result = input.Split(' ').Last(); 
Console.WriteLine(result); 

정규식도 옵션입니다 만, 과장은 위의 간단한 솔루션을 제공합니다. 이 시나리오에 맞는 좋은 바로 가기가 첫 경기가 오른쪽에서 시작 얻을 수있는 RegexOptions.RightToLeft 옵션을 사용하는 것입니다

string result = Regex.Match(input, @"\w+", RegexOptions.RightToLeft).Value; 
1

당신은 문자열 '로스트'하고 두 번 발생하면, 당신은 그것을 확인할 수 있습니다 찾아보실 수 있습니다 '분실'입니다. 나는 당신의 요구 사항을 이해한다면

+0

좋은 접근 :) – oleksii

2

, 당신은 ?Lost 또는 Stolen의 인스턴스를 찾고 :

var q = myString.IndexOf("?"); 
var lost = q >= 0 && myString.IndexOf("Lost", q) > 0; 
var stolen = q >= 0 && myString.IndexOf("Stolen", q) > 0; 

// or 
var lost = myString.LastIndexOf("Lost") > myString.IndexOf("?"); 
var stolen = myString.LastIndexOf("Stolen") > myString.IndexOf("?"); 

// don't forget 
var neither = !lost && !stolen; 
0

당신이이 것을 알고 문자열에의 인덱스를 사용할 수 있습니다이 경우 그 수 항상 분실 또는 도난 말을하려고

그래서 분실하거나 도난당한 내용을 분석 한 다음 남은 문자열과 일치하는 키워드를 찾으십시오. 같은

뭔가 : .EndsWith()를 사용하는

int questionIndex = inputValue.indexOf("?"); 
string toMatch = inputValue.Substring(questionIndex); 
if(toMatch == "Lost") 
0

이 사용 사례에 대해 작동하는 경우, 그것은 더 쉬울 수 있습니다.

bool lost = my_string.EndsWith("Lost");