2012-12-09 81 views
0

如何在C#中搜索一些字符串?那么,如果我有字符串“詹姆斯邦德”,我正在寻找“詹姆斯”或“詹姆斯”它将返回true,但如果我正在寻找“詹姆”它将返回false。我该怎么做? 也许我需要一点特定。我需要根据由''分割的单词进行搜索。'见上文。如果我正在寻找jame,它将返回false。如果我使用包含当我搜索jame时它也将返回true?在C中搜索一些字符串#

+0

你的问题是模糊的。 “我怎么能做到这一点?”意味着什么?如何搜索“jame”返回false或如何使搜索“jame”返回true。请重新提出您的问题。 –

+0

我已经更新了它。看到我的问题 – albilaga

回答

1

根据你的问题,这是你会使用。

var ex = "James Bond".ToLower(); //normalize case 
    bool contains = ex.Split(' ').Any(x => x == "jame"); 
    //FALSE because the *word* "jame" is not found in "james bond" 

由于这个问题造成了很多困惑,你必须要记住所有相关的套管。

var ex = "James Bond"; 
bool contains = ex.Contains("jame"); 
// FALSE because "jame" is not found in "James Bond" due to case-sensitivity 

var ex = "James Bond".ToLower(); //normalize case 
bool contains = ex.Contains("jame"); 
// TRUE because "jame" is FOUND in "james bond" due to normalized case 
+0

'contains'将会是'false' –

+0

@Sahuagin这就是他想要的 –

+0

除非当然这一切都与小写有关。 –

0

使用正则表达式。举一个例子,请参阅:

http://msdn.microsoft.com/en-us/library/ms228595%28v=vs.80%29.aspx

这里的时候,“牛人”是字符串内的任何地方发现的是匹配。在你的情况下,这将是“詹姆斯”。

+0

虽然这是正确的,对于这样一个微不足道的问题,他最好只使用'Contains' –

+0

@KuyaJohn你是对的,他澄清了他的问题。由于使用的语言,这个问题引起了很多混乱。 –

-3

试试看。

方法:1个

string s1 = "The quick brown fox jumps over the lazy dog"; 
string s2 = "fox"; 
bool b; 
bool c; 
b = s1.Contains(s2); 
c = s1.Contains("test") 

布尔B就返回true。
bool c将返回false。


方法:2

string str = "My Name is james"; 

int result = str.IndexOf("james"); 

结果将是-1,如果特定的词不是在句子中找到。

+0

我认为'Contains'并没有真正回答这个问题。如果我有一个字符串'Hello World',并且我想使用'contains'找到'Hell'这个单词,那么它将返回OP不需要的真。他想要像他在这个问题上提到的那样找到整个单词。 –

+0

@KuyaJohn我们可以使用IndexOf(“”)方法获取预期的结果。 –

+0

@Bala好..特别是你为什么选择这个答案我们的沟通..错误.. :) –

0

可以使用Contains方法来搜索:

string[] names = new string[] { "joe", "bob", "chris" }; 
if(names.Contains("james")){ 
    //code 
} 
+2

我认为'Contains'并没有真正回答这个问题。如果我有一个字符串'Hello World',并且我想使用'contains'找到'Hell'这个单词,那么它将返回OP不需要的真。他想要像他在这个问题上提到的那样找到整个单词。他提到的 –

+0

,他想搜索字符串的一部分,例如“jame”,不完全是“James”,在我的情况下,Contains是个好主意。 –

0

您可以使用单词边界正则表达式做到这一点。以下代码将向您展示如何使用不区分大小写的搜索进行匹配,并且不会出现类似“jame”的误报。它可以在给定字符串中的任

static void Main(string[] args) 
    { 
     string name_to_match = "James Bond"; 
     string word_to_find = "james"; 
     string word_to_not_find = "jame"; 

     string patternToFind = string.Format(@"\b{0}\b", word_to_find); 
     string patternToNotFind = string.Format(@"\b{0}\b", word_to_not_find); 

     Regex regexToFind = new Regex(patternToFind, RegexOptions.IgnoreCase); 
     Regex regexToNotFind = new Regex(patternToNotFind, RegexOptions.IgnoreCase); 

     bool foundNameExpected = regexToFind.IsMatch(name_to_match); 
     bool foundNameNotExpected = regexToNotFind.IsMatch(name_to_match); 
    } 

在这种情况下,布尔foundNameExpected将是真实的(因为我们预计在“詹姆斯·邦德”,“詹姆斯”,以配合“詹姆斯”),但foundNameNotExpected会是假的(因为我们不希望“詹姆斯”以匹配“詹姆斯”)。

2

您必须为此使用Regex。您不能使用Contains,因为它不会考虑大小写不敏感并匹配整个单词模式。使用此来代替:

string text = "James bond"; 

// this will return true 
bool result = Regex.IsMatch(text, "\\bjames\\b", RegexOptions.IgnoreCase); 

// this will return false 
bool result = Regex.IsMatch(text, "\\bjame\\b", RegexOptions.IgnoreCase); 

Regex格式,上述\b旨意匹配的字母数字到非字母数字的边界(或反之亦然)。在这种情况下,这可以确保您将整个词匹配jamesjame,而不是一个部分词。

1

您可以使用Split将字符串分隔成分离的部分。例如:

string[] items = "James Bond".Split(' '); 
// items == { "James", "Bond" } 

您可以使用ToLower来防止大小写敏感。例如:

string lower = "James Bond".ToLower(); 
// lower == "james bond" 

您可以使用StartsWith来确定字符串是否以某个子字符串开头。例如:

bool startsWithJame = "James Bond".StartsWith("Jame"); 
// startsWithJame == true 

使用它们放在一起:

bool anyWordStartsWith_jame_NoCaseSensitivity = 
    "James Bond" 
    .ToLower() 
    .Split(' ') 
    .Any(str => str.StartsWith("jame")); 
// anyWordStartsWith_jame_NoCaseSensitivity == true