簡體   English   中英

檢查一個字符串是否包含來自另一個字符串的字母

[英]check if a string contains letters from another string

我正在研究“創建名稱功能”。 應創建的新名稱不能與已存在的名稱相同。 我有一個string usernames; 其中包含所有已經存在的名稱:Tom bob Harry... 然后我有一個輸入字段,您可以在其中編寫新名稱 string newName = inputField.text

我想做一個 if 語句來查看newName是否包含來自string usernames的名稱。 我已經嘗試過這個:

if (usernames.Contains(NewName)) //if the newName not already exists

但問題是每個newName都不包含用戶名,即使它包含。 我已經搜索了幾個小時,但我對此很陌生,找不到好的答案。 我很感謝任何幫助::)

將所有名稱塞入一個大字符串中存在固有缺陷。 問題是,當您不想要它時, Contains 可能會返回 true。 如果usernames已經包含“Robert”並且要檢查的新名稱是“Rob”怎么辦? 現在 Rob 不能輸入他的名字,因為它與 Robert 沖突。

另一個例子:如果您執行不區分大小寫的檢查,那么如果usernames已經包含“Elizabeth”,則“Liz”或“Beth”將返回 true。

更好的設計是收集個人名稱。 雖然這可能是List<string> ,但我認為Hashset<string>更適合您的需求。 如果您希望搜索區分大小寫,即“bob”和“Bob”是 2 個不同的名稱,那么您無需做任何特別的事情:

Hashset<string> usernames = new Hashset<string>();

但是,如果您確實希望名稱不區分大小寫,那么您可以相應地聲明您的 hash 設置:

Hashset<string> usernames = new Hashset<string>(StringComparer.OrdinalIgnoreCase);

Hashset 也有一個Contains方法,但它針對快速查找進行了優化。 有關 Hashset 的更多信息,請參閱此鏈接

更新使用

OP說他不能使用Hashset。 這是初學者的絆腳石。 當我們剛開始時,我們都被它絆倒了。 要使用某些對象,您需要完全限定它們,這會使您的代碼看起來很難看,或者在命名空間之前添加適當的using

  • Hashset<T>來自System.Collections.Generic

  • StringComparer class 來自System

您可以使用System.Collections.Generic.Hashset<string>但這似乎有點羅嗦和丑陋。 相反,在您的命名空間之前添加這些語句:

using System;
using System.Collections.Generic;

Hashset 和 StringComparer 應該可以正常工作。

有關 StringComparer 的更多信息,請參閱此鏈接

我不確定我是否了解您真正願意做什么,但我認為 IndexOf 應該可以解決問題: if(usernames.IndexOf(newName)>0) then newName 已經存在於用戶名中。

或者,正如您嘗試的那樣: if(usernames.Contains(newName))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM