检查一个字符串是否包含来自另一个字符串的字母
check if a string contains letters from another string
我正在研究 "Create name function"。应创建的新名称不能与已存在的名称相同。
我有一个 string usernames;
,其中包含所有已经存在的名称:Tom bob Harry... 然后我有一个输入字段,您可以在其中输入 新名称 。 string newName = inputField.text
我想做一个 if 语句来查看 newName 是否包含 string usernames
中的名称。
我已经试过了:
if (usernames.Contains(NewName)) //if the newName not already exists
但问题是每个 newName 即使包含用户名也不包含用户名。我已经搜索了几个小时,但我对此很陌生,找不到好的答案。我感谢任何帮助! :)
我不确定我是否理解您真正愿意做的事情,但我认为 IndexOf 应该可以解决问题:
if(usernames.IndexOf(newName)>0)
那么 newName 已经存在于用户名中。
或者,在您尝试时:
if(usernames.Contains(newName))
将所有名称都塞到一个大字符串中存在固有缺陷。问题是 Contains 可以 return true 当你不想要它的时候。如果 usernames
已经包含 "Robert" 并且要检查的新名称是 "Rob" 怎么办?现在 Rob 无法输入他的名字,因为它与 Robert 冲突。
另一个示例:如果您执行不区分大小写的检查,那么如果 usernames
已经包含 "Elizabeth",则 "Liz" 或 "Beth" 将 return 为真。
更好的设计是收集个人姓名。虽然这可能是 List<string>
,但我认为 Hashset<string>
更适合您的需求。如果您希望搜索区分大小写,即 "bob" 和 "Bob" 是 2 个不同的名称,那么您无需执行任何特殊操作:
Hashset<string> usernames = new Hashset<string>();
但是如果您确实希望名称不区分大小写,那么您可以相应地声明您的哈希集:
Hashset<string> usernames = new Hashset<string>(StringComparer.OrdinalIgnoreCase);
Hashset 也有一个 Contains
方法,但它针对快速查找进行了优化。有关哈希集的更多信息,请参阅 this link.
使用更新
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 的更多信息,请参阅 this link。
我正在研究 "Create name function"。应创建的新名称不能与已存在的名称相同。
我有一个 string usernames;
,其中包含所有已经存在的名称:Tom bob Harry... 然后我有一个输入字段,您可以在其中输入 新名称 。 string newName = inputField.text
我想做一个 if 语句来查看 newName 是否包含 string usernames
中的名称。
我已经试过了:
if (usernames.Contains(NewName)) //if the newName not already exists
但问题是每个 newName 即使包含用户名也不包含用户名。我已经搜索了几个小时,但我对此很陌生,找不到好的答案。我感谢任何帮助! :)
我不确定我是否理解您真正愿意做的事情,但我认为 IndexOf 应该可以解决问题:
if(usernames.IndexOf(newName)>0)
那么 newName 已经存在于用户名中。
或者,在您尝试时:
if(usernames.Contains(newName))
将所有名称都塞到一个大字符串中存在固有缺陷。问题是 Contains 可以 return true 当你不想要它的时候。如果 usernames
已经包含 "Robert" 并且要检查的新名称是 "Rob" 怎么办?现在 Rob 无法输入他的名字,因为它与 Robert 冲突。
另一个示例:如果您执行不区分大小写的检查,那么如果 usernames
已经包含 "Elizabeth",则 "Liz" 或 "Beth" 将 return 为真。
更好的设计是收集个人姓名。虽然这可能是 List<string>
,但我认为 Hashset<string>
更适合您的需求。如果您希望搜索区分大小写,即 "bob" 和 "Bob" 是 2 个不同的名称,那么您无需执行任何特殊操作:
Hashset<string> usernames = new Hashset<string>();
但是如果您确实希望名称不区分大小写,那么您可以相应地声明您的哈希集:
Hashset<string> usernames = new Hashset<string>(StringComparer.OrdinalIgnoreCase);
Hashset 也有一个 Contains
方法,但它针对快速查找进行了优化。有关哈希集的更多信息,请参阅 this link.
使用更新
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 的更多信息,请参阅 this link。