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

しかし、問題はそれよりも深いところにあります。2つの入力について説明しました。たとえば、「文字列のみをテストする」などのチェックする文字列と、「文字列のみをテストするためにデータが提供される」などの存在を確認する文字列です。メソッドは1つの入力のみを受け入れ、他の状態を使用しません。したがって、それはおそらく機能しません。一歩下がって、2つの入力が必要であることに気づかなかった理由と、実際にテストで「文字列のみをテスト」のみを使用し、「文字列のみをテストするためにデータが提供されている」と言及しなかった理由を理解することは価値があります。

ただし、実際にはメソッドはまったく必要ありません。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");

もちろん、文字列クラスには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 に答える