0

分割値のいずれかが文字列であるかどうかを確認するために分割した文字列があります。もしそうなら、私はtrueを返したいのですが、それ以外の場合はfalseです。

string words = "1 2 c 5";

簡単なアプローチです。int 配列に変換してから、値を並べて比較できます。

int[] iar = words.Split(' ').Select(s => int.TryParse(s, out n) ? n : 0).ToArray();

誰もがより良いアプローチを推奨できますか?

4

3 に答える 3

7

を使用せずに簡単に確認できますSplit

var result = words.Any(c => !char.IsWhiteSpace(c) 
                         && !char.IsDigit(c));

または使用Split

var result = words.Split()
                  .Any(w => w.Any(c => !char.IsDigit(c)));

ポイントは、またはchar.IsDigitを使用する代わりにチェックに使用できることです。int.Parseint.TryParse

于 2013-06-18T14:52:01.990 に答える
2

簡単な方法でこれを行うことができます:

public static bool CheckForNum(string[] wordsArr)
{
     int i = 0;
     foreach (string s in wordsArr)
     {
         if (Int32.TryParse(s, out i))
         {
             return true;
         }
     }
     return false;
 }

使用:

bool result = CheckForNum(words.Split(' '));
Console.Write(result);
于 2013-06-18T14:52:53.137 に答える
0

正規表現を使用しないのはなぜですか? 文字列に単語と数字が含まれている場合は、文字と数字が含まれている必要があります。私はあなたの質問のロジックを完全には理解していないので、ここでロジックを調整する必要があるかもしれません.

using System;
using System.Text.RegularExpressions;

...

string words = "1 2 c 5";

Match numberMatch = Regex.Match(words, @"[0-9]", RegexOptions.IgnoreCase);
Match letterMatch = Regex.Match(words, @"[a-zA-Z]", RegexOptions.IgnoreCase);

// Here we check the Match instance.
if (numberMatch.Success && letterMatch.Success)
{
    // there are letters and numbers
}
于 2013-06-18T14:50:46.753 に答える