2012-03-29 24 views
2

私は、この問題に良い解決策を見つけるように見えることはできません。私は紛失した、または盗難された機器を受け取った報告書からフィードされた一連の文字列を持っています。私はstring.IndexOf関数を使って残りのフォームを実行しています。この問題は、デバイスが紛失または盗難された場合に表示されるフィールドにあります。のC# - 検索文字列

例: "?紛失したり盗まれたり紛失" "?紛失したり盗まれたり盗まれた"

私はstring.IndexOf(@"Lost")にそれを行うとき、私はこれを読むことができるようにする必要がありますが、それは質問にあるので、常に失われて返されます。

残念ながら私はフォーム自体を変更することはできませんし、提出方法の性質上、最初の15文字ほどの文字をノックすることはできませんいくつかのケースではほとんどありません。ここではオプションの

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

常に1つの疑問符がありますか?それによって分割する。 – Andre

+0

'私は、フォームの残りの部分を通じてstring.IndexOf機能を使用してきた、それは、フォームのかなりwell'どのような私たちがここで話している作品? –

答えて

3

カップル:

私は本当に最初の結果が発見された後、ロジックは次のようになりますように、私は、文字列を検索し続けることができるようになるC#で何かをしたいと思います。あなたは宇宙の最後のインデックスを探し、文字列の残りの部分を取ることができる:

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

その可能いつもあなたは残りの文字列と一致するキーワード、その後のためのように、紛失または盗難を解析

最初

を紛失したり盗まれたと言うことだろう。以下のような

何か:

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

それはあなたのユースケースのために働く場合、.EndsWith()を使用する方が簡単かもしれません。

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