2017-03-05 94 views
0

我有一個字符串數組lines,其中一個項目可能包含值MisterMisses數組包含元素,但IndexOf返回-1

var lines = "3.3. 3 - 3 88C Mister Molitor D For Ne Les Text".Split(' '); 

Console.WriteLine(lines.Contains("Mister") || lines.Contains("Misses")); 

返回true。現在我想找到的Mister,分別Misses索引,使用

var index = lines.IndexOf("Mister"); 

(我沒有把代碼Misses這裏簡單起見)

然而,指數總是-1(儘管項目存在於數組中)。所以,我想一定有什麼不同的嘗試(我甚至增加ToLower(),但是這不能作爲lines.Contains() otherwise'd返回false的原因):

var index = lines.FindIndex(x => x.ToLower() == "mister"); 

但仍...index = -1。這真讓我抓狂!我們肯定有包含項目的數組,但我找不到索引。

+1

「3.3 3 - 3 88C小姐莫利托d網元萊斯文本」這個字符串包含單詞「小姐」,但它不包含'先生'這個詞。 –

+1

請注意'IndexOf'只是一個'string'的方法,但是在代碼中您使用的是字符串數組。你可能要查找的是數組的FindIndex。在var index = lines.FindIndex(x => x.ToLower()==「mister」);''爲我工作 –

+0

@DanielHollinrake請仔細閱讀:'使用您的代碼,並使用'misses'而不是'mister' (爲了簡單起見,我沒有把這些代碼放在這裏)'。 「Misses」的處理方式與「Mister」完全相同。我知道這非常混亂,但我編輯了原始字符串,以便馬上清楚。 –

回答

3

以下是true

lines.Contains("Mister") || lines.Contains("Misses") 

,因爲你的字符串字面包含單詞Misses。也就是說,當您撥打參數lines上的IndexOf作爲參數Mister時,您將獲得-1,因爲未包含在lines中。

+1

嗯,他寫了 「(爲了簡單起見,我沒有在這裏輸入'Misses'的代碼)」 所以我會假設有一條類似的線。 但是,由於迄今爲止發佈的代碼無法看到問題,因此不要發佈一個看似微不足道的案例供我們檢查。 –

+0

我需要確認的是,如果我只在處理'mister'時在字符串中包含'Misses'的代碼中,字符串中的給定示例不是一個好主意。無論如何,@ CrushaK.Rool是對的!我編輯了這個例子的字符串。 –

+0

@Çan我很抱歉,但我不明白你的意思。你什麼意思?從你發佈的代碼中,我看不出我們怎麼能得到'-1'以外的東西。我錯過了什麼嗎?謝謝 – Christos

1

假設您確實在某處有文字「Mister」下面的代碼應該工作:

string[] lines = "3.3. 3 - 3 88C Misses Molitor D For Ne Les Text".Split(' ');  
Console.WriteLine(lines.Contains("Mister") || lines.Contains("Misses")); 
var idx = Array.FindIndex(lines, l => l == "Misses"); 

Console.WriteLine(idx); 
0

此代碼爲我工作。 Pos的值爲5. containsOne爲true,contains2爲false。

var lines = "3.3. 3 - 3 88C Mister Molitor D For Ne Les Text".Split(' '); 
var pos = Array.FindIndex(lines, c => c.Equals("Mister")); 

var containsOne = lines.Contains("Mister") || lines.Contains("Misses"); 
var containsTwo = lines.Contains("Mister") && lines.Contains("Misses"); 

有關FindIndex方法的更多信息,看看this page on MSDN

相關問題