[英]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.