programing

문자열 배열에 문자열이 포함되어 있는지 확인하기 위해 C# 사용

abcjava 2023. 4. 11. 21:36
반응형

문자열 배열에 문자열이 포함되어 있는지 확인하기 위해 C# 사용

문자열 값이 문자열 배열에 단어를 포함하는지 확인하기 위해 C#을 사용합니다.예를들면,

string stringToCheck = "text1text2text3";

string[] stringArray = { "text1", "someothertext", etc... };

if(stringToCheck.contains stringArray) //one of the items?
{

}

stringToCheck' 문자열 값에 배열에 단어가 포함되어 있는지 확인하려면 어떻게 해야 합니까?

방법은 다음과 같습니다.

using System.Linq;

if(stringArray.Any(stringToCheck.Contains))

/* or a bit longer: (stringArray.Any(s => stringToCheck.Contains(s))) */

'아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아,stringToCheck에는, 「」의 중 .stringArray되어 있는 하려면 , 변경해 주세요.Any로로 합니다.All:

if(stringArray.All(stringToCheck.Contains))

그 방법은 다음과 같습니다.

string stringToCheck = "text1";
string[] stringArray = { "text1", "testtest", "test1test2", "test2text1" };
foreach (string x in stringArray)
{
    if (stringToCheck.Contains(x))
    {
        // Process...
    }
}

더 나은 해결책을 찾고 있을 수도 있습니다.LINQ를 활용한 Anton Gogolev의 답변을 참조하십시오.

⚠136 참고: 이 내용은 질문에 대한 답변이 아닙니다.
질문은 "단어 목록에서 어떤 단어가 포함되어 있는지 어떻게 확인할 수 있는가?" 입니다.
이 답변은 단어 목록에 특정 단어가 하나 포함되어 있는지 확인합니다.

이것을 시험해 보세요.

LINQ 사용 불필요

if (Array.IndexOf(array, Value) >= 0)
{
    //Your stuff goes here
}
⚠136 참고: 이 내용은 질문에 대한 답변이 아닙니다.
질문은 "단어 목록에서 어떤 단어가 포함되어 있는지 어떻게 확인할 수 있는가?" 입니다.
이 답변은 단어 목록에 특정 단어가 하나 포함되어 있는지 확인합니다.

LINQ 메서드를 사용합니다.

stringArray.Contains(stringToCheck)
⚠136 참고: 이 내용은 질문에 대한 답변이 아닙니다.
질문은 "단어 목록에서 어떤 단어가 포함되어 있는지 어떻게 확인할 수 있는가?" 입니다.
이 답변은 단어 목록에 특정 단어가 하나 포함되어 있는지 확인합니다.

가장 쉽고 간단한 방법:

bool bol = Array.Exists(stringarray, E => E == stringtocheck);
⚠136 참고: 이 내용은 질문에 대한 답변이 아닙니다.
질문은 "단어 목록에서 어떤 단어가 포함되어 있는지 어떻게 확인할 수 있는가?" 입니다.
이 답변은 단어 목록에 특정 단어가 하나 포함되어 있는지 확인합니다.
string strName = "vernie";
string[] strNamesArray = { "roger", "vernie", "joel" };

if (strNamesArray.Any(x => x == strName))
{
   // do some action here if true...
}

다음과 같은 경우가 있습니다.

string stringToCheck = "text1text2text3";
string[] stringArray = new string[] { "text1" };
if (Array.Exists<string>(stringArray, (Predicate<string>)delegate(string s) { 
    return stringToCheck.IndexOf(s, StringComparison.OrdinalIgnoreCase) > -1; })) {
    Console.WriteLine("Found!");
}
⚠136 참고: 이 내용은 질문에 대한 답변이 아닙니다.
질문은 "단어 목록에서 어떤 단어가 포함되어 있는지 어떻게 확인할 수 있는가?" 입니다.
이 답변은 단어 목록에 특정 단어가 하나 포함되어 있는지 확인합니다.
  stringArray.ToList().Contains(stringToCheck)

ifstringArray에는 다양한 길이의 문자열이 다수 포함되어 있으므로 Trie를 사용하여 문자열 배열을 저장 및 검색하는 것을 검토해 주십시오.

public static class Extensions
{
    public static bool ContainsAny(this string stringToCheck, IEnumerable<string> stringArray)
    {
        Trie trie = new Trie(stringArray);
        for (int i = 0; i < stringToCheck.Length; ++i)
        {
            if (trie.MatchesPrefix(stringToCheck.Substring(i)))
            {
                return true;
            }
        }

        return false;
    }
}

은 ', 하다, 하다'의 내용입니다.Trie 표시

public class Trie
{
    public Trie(IEnumerable<string> words)
    {
        Root = new Node { Letter = '\0' };
        foreach (string word in words)
        {
            this.Insert(word);
        }
    }

    public bool MatchesPrefix(string sentence)
    {
        if (sentence == null)
        {
            return false;
        }

        Node current = Root;
        foreach (char letter in sentence)
        {
            if (current.Links.ContainsKey(letter))
            {
                current = current.Links[letter];
                if (current.IsWord)
                {
                    return true;
                }
            }
            else
            {
                return false;
            }
        }

        return false;
    }

    private void Insert(string word)
    {
        if (word == null)
        {
            throw new ArgumentNullException();
        }

        Node current = Root;
        foreach (char letter in word)
        {
            if (current.Links.ContainsKey(letter))
            {
                current = current.Links[letter];
            }
            else
            {
                Node newNode = new Node { Letter = letter };
                current.Links.Add(letter, newNode);
                current = newNode;
            }
        }

        current.IsWord = true;
    }

    private class Node
    {
        public char Letter;
        public SortedList<char, Node> Links = new SortedList<char, Node>();
        public bool IsWord;
    }

    private Node Root;
}

stringArray 게 요.HashSetTrie

public static bool ContainsAny(this string stringToCheck, IEnumerable<string> stringArray)
{
    int stringLength = stringArray.First().Length;
    HashSet<string> stringSet = new HashSet<string>(stringArray);
    for (int i = 0; i < stringToCheck.Length - stringLength; ++i)
    {
        if (stringSet.Contains(stringToCheck.Substring(i, stringLength)))
        {
            return true;
        }
    }

    return false;
}

를 내릴 수 .string.ContainsAny() ★★★★★★★★★★★★★★★★★」string.ContainsAll()방법들.보너스로, 나는 심지어 내 아들을string.Contains()대소문자를 구별하지 않는 비교 등을 가능하게 하는 방법

public static class Extensions
{
    public static bool Contains(this string source, string value, StringComparison comp)
    {
        return source.IndexOf(value, comp) > -1;
    }

    public static bool ContainsAny(this string source, IEnumerable<string> values, StringComparison comp = StringComparison.CurrentCulture)
    {
        return values.Any(value => source.Contains(value, comp));
    }

    public static bool ContainsAll(this string source, IEnumerable<string> values, StringComparison comp = StringComparison.CurrentCulture)
    {
        return values.All(value => source.Contains(value, comp));
    }
}

다음 코드를 사용하여 테스트할 수 있습니다.

    public static void TestExtensions()
    {
        string[] searchTerms = { "FOO", "BAR" };
        string[] documents = {
            "Hello foo bar",
            "Hello foo",
            "Hello"
        };

        foreach (var document in documents)
        {
            Console.WriteLine("Testing: {0}", document);
            Console.WriteLine("ContainsAny: {0}", document.ContainsAny(searchTerms, StringComparison.OrdinalIgnoreCase));
            Console.WriteLine("ContainsAll: {0}", document.ContainsAll(searchTerms, StringComparison.OrdinalIgnoreCase));
            Console.WriteLine();
        }
    }

이를 위해서는 LINQ와 메서드 그룹을 사용하는 것이 가장 빠르고 콤팩트한 방법입니다.

var arrayA = new[] {"element1", "element2"};
var arrayB = new[] {"element2", "element3"};

if (arrayB.Any(arrayA.Contains)) 
    return true;
⚠136 참고: 이 내용은 질문에 대한 답변이 아닙니다.
질문은 "단어 목록에서 어떤 단어가 포함되어 있는지 어떻게 확인할 수 있는가?" 입니다.
이 답변은 단어 목록에 특정 단어가 하나 포함되어 있는지 확인합니다.

LINQ를 사용하지만 다음 방법으로도 실행할 수 있습니다.

new[] {"text1", "text2", "etc"}.Contains(ItemToFind);

배열 클래스의 Find 또는 FindIndex 메서드를 사용하는 경우:

if(Array.Find(stringArray, stringToCheck.Contains) != null) 
{ 
}
if(Array.FindIndex(stringArray, stringToCheck.Contains) != -1) 
{ 
}

이 솔루션도 시도해 볼 수 있습니다.

string[] nonSupportedExt = { ".3gp", ".avi", ".opus", ".wma", ".wav", ".m4a", ".ac3", ".aac", ".aiff" };
        
bool valid = Array.Exists(nonSupportedExt,E => E == ".Aac".ToLower());
⚠136 참고: 이 내용은 질문에 대한 답변이 아닙니다.
질문은 "단어 목록에서 어떤 단어가 포함되어 있는지 어떻게 확인할 수 있는가?" 입니다.
이 답변은 단어 목록에 특정 단어가 하나 포함되어 있는지 확인합니다.

콘솔 응용 프로그램에서 다음을 사용하여 인수를 확인합니다.

var sendmail = args.Any( o => o.ToLower() == "/sendmail=true");

안톤 고골레프가 제안하는 것과 같은 방법으로 이 안에 어떤 아이템이 있는지 확인할 수도 있습니다.stringArray1임의의 항목과 일치합니다.stringArray2:

using System.Linq;
if(stringArray1.Any(stringArray2.Contains))

마찬가지로 stringArray1의 모든 항목은 stringArray2의 모든 항목과 일치합니다.

using System.Linq;
if(stringArray1.All(stringArray2.Contains))

제 경우 위의 답변은 효과가 없었습니다.배열에 문자열이 있는지 확인하고 부울 값에 할당했습니다.안톤 고골레프의 답변을 수정해서 삭제했어요Any()및 method를 합니다.stringToCheck내 the의 Contains()★★★★★★ 。

bool isContain = stringArray.Contains(stringToCheck);

Maitrey684의 IndexOf 및 Theomax의 Foreach 루프와 유사한 방법을 사용하여 만들었습니다.(주의: 처음 3행의 "문자열"은 어레이를 생성하여 적절한 포맷으로 만드는 방법의 예시일 뿐입니다).

두 어레이를 비교하는 경우 세미콜론으로 구분되지만 마지막 값에는 세미콜론으로 구분되지 않습니다.배열의 문자열 형식에 세미콜론을 추가하는 경우(즉, a;b;c가 a;b;c가 된다), 위치에 관계없이 "x;"를 사용하여 일치시킬 수 있습니다.

bool found = false;
string someString = "a-b-c";
string[] arrString = someString.Split('-');
string myStringArray = arrString.ToString() + ";";

foreach (string s in otherArray)
{
    if (myStringArray.IndexOf(s + ";") != -1) {
       found = true;
       break;
    }
}

if (found == true) { 
    // ....
}

이전 답변을 완료하려면 IgnoreCase 체크에 대해 다음을 사용합니다.

stringArray.Any(s => stringToCheck.IndexOf(s, StringComparison.CurrentCultureIgnoreCase) > -1)

대부분의 솔루션이 올바르지만 대소문자를 구분하지 않고 값을 확인해야 하는 경우:

using System.Linq;
...
string stringToCheck = "text1text2text3";
string[] stringArray = { "text1", "someothertext"};

if(stringArray.Any(a=> String.Equals(a, stringToCheck, StringComparison.InvariantCultureIgnoreCase)) )
{
   //contains
}

if (stringArray.Any(w=> w.IndexOf(stringToCheck, StringComparison.InvariantCultureIgnoreCase)>=0))
{
   //contains
}

dotNetFiddle 예시

LINQ:

array.임의의 단어(x = > word).등호(x);

배열에 단어(정확한 일치)가 포함되어 있는지 확인합니다.서브스트링에 .Contains를 사용하거나 다른 로직을 적용해야 합니다.

시험:

String[] val = { "helloword1", "orange", "grape", "pear" };
String sep = "";
string stringToCheck = "word1";

bool match = String.Join(sep,val).Contains(stringToCheck);
bool anothermatch = val.Any(s => s.Contains(stringToCheck));
string [] lines = {"text1", "text2", "etc"};

bool bFound = lines.Any(x => x == "Your string to be searched");

bFound는 검색된 문자열이 배열 'lines'의 요소와 일치할 경우 true로 설정됩니다.

string word = "XRC"; // Try also with word = null; 

string[] myWords = { "CUS", "CT", "NMS", "RX", "RUS", "VUS", "XRC", null };

if (myWords.Contains(word))
    Console.WriteLine("1. if: contains the string");
    
if (myWords.Any(word.Contains))
    Console.WriteLine("2. if: contains the string, but null elements throws an exception");
    
if (myWords.Any(x => x.Equals(word)))
    Console.WriteLine("3. if: contains the string, but null elements throws an exception ");
public bool ContainAnyOf(string word, string[] array) 
    {
        for (int i = 0; i < array.Length; i++)
        {
            if (word.Contains(array[i]))
            {
                return true;
            }
        }
        return false;
    }

이거 드셔보세요

string stringToCheck = "text1text2text3";
string[] stringArray = new string[] { "text1" };

var t = lines.ToList().Find(c => c.Contains(stringToCheck));

그러면 찾고 있는 텍스트의 첫 번째 발생률이 표시된 줄이 반환됩니다.

int result = Array.BinarySearch(list.ToArray(), typedString, StringComparer.OrdinalIgnoreCase);

이거 먹어봐.예:필드에 배열에 포함된 단어가 있는지 확인합니다.필드(someField)에 배열 내의 단어가 포함되어 있는지 확인합니다.

String[] val = { "helloword1", "orange", "grape", "pear" };

Expression<Func<Item, bool>> someFieldFilter = i => true;

someFieldFilter = i => val.Any(s => i.someField.Contains(s));

LINQ를 필요로 하지 않는 간단한 솔루션:

String.Join(",", array).Contains(Value + ",");

이거 먹어봐.루프가 필요 없어요

string stringToCheck = "text1";
List<string> stringList = new List<string>() { "text1", "someothertext", "etc.." };
if (stringList.Exists(o => stringToCheck.Contains(o)))
{

}

언급URL : https://stackoverflow.com/questions/2912476/using-c-sharp-to-check-if-string-contains-a-string-in-string-array

반응형