0

任何人都可以帮助我在 C# Winforms 中编写一段代码,它可以给我一个布尔值,即一段字符串是否包含几个单词。

例如,如果我想检查字符串“测试字符串”中是否存在字符串测试字符串。

我写了以下一段代码,但它总是给我真实的,无论字符串是否包含单词。

    private bool ContainsText(string input)
    {
        for (int i = 0; i < input.Length; i++)
        {
            if (((int)input[i] >= 65 && (int)input[i] <= 90) || ((int)input[i] >= 97 && (int)input[i] <= 177))
                return true;
        }

        return false;
    }

当我调用以下行时,我总是得到true,这是不正确的

MessageBox.Show(ContainsText("test only string").ToString());
4

4 回答 4

2

代码方面,如果任何字符由于某种原因在“A 到 Z”或“a 到 U+00B1”中,您的ContainsText代码会立即返回。trueinput

但问题远不止于此:您已经描述了两个输入 - 要检查的字符串,例如“仅测试字符串”和检查其存在的字符串,例如“提供数据以仅测试字符串”。您的方法只接受一个输入,不使用任何其他状态。所以它不可能工作。值得退后一步,尝试弄清楚为什么您没有注意到您需要两个输入 - 以及为什么您的测试确实只使用了“仅测试字符串”而没有提及“提供数据以仅测试字符串”。

您根本不需要方法 -String已经有Contains方法:

if (textToCheck.Contains(textToFind))
{
    ...
}

这是假设你想要一个序数比较。如果要以区分区域性或不区分大小写的方式进行检查,请IndexOf与适当的一起使用。StringComparison

于 2013-03-16T18:02:32.457 回答
1

一个简单的string.IndexOf可能带有忽略大小写的枚举:

 string myTestString = "Data is provided to Test Only String";
 if(myTestString.IndexOf("test only string", StringComparison.CurrentCultureIgnoreCase) >= 0)
    Console.WriteLine("Found text");

当然 string 类也有 Contains 方法,但它是作为对 IndexOf 的调用实现的,不可能忽略大小写。

public bool Contains(string value)
{
     return (this.IndexOf(value, StringComparison.Ordinal) >= 0);
}
于 2013-03-16T18:01:15.950 回答
1

您可以使用 String 对象的 Contains 方法。

var a = "Data is provided to test only string";
var b = "test only string";

if (a.Contains(b))
     MessageBox.Show("yes");
于 2013-03-16T18:01:49.447 回答
0

使用 IndexOf

http://www.dotnetperls.com/indexof

使用示例..

string str = "string to test";
bool result = str.IndexOf("The hosted network started.") != -1;

MessageBox.Show(result.ToString());
于 2013-03-16T18:00:44.190 回答