检查一个字符串是否包含另一个字符串的字母

问题描述 投票:0回答:2

我正在使用“创建名称功能”。应该创建的新名称不能与已经存在的名称相同。我有一个string usernames;,其中包含所有已经存在的名称,例如:Tom bob Harry ...,然后有一个输入字段,您可以在其中输入新名称string newName = inputField.text

我想执行一个if语句,查找newName是否包含string usernames中的名称。我已经尝试过了:

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

但是这是每个newName即使包含用户名也不包含用户名的问题。我已经搜索了几个小时,但是我对此很陌生,找不到合适的答案。感谢您的帮助! :)

c# string if-statement contains
2个回答
0
投票

我不确定我是否理解您的真正意愿,但我认为IndexOf应该可以解决问题:if(usernames.IndexOf(newName)>0),则用户名中已经存在newName。

或者,您正在尝试:if(usernames.Contains(newName))


0
投票

将所有名称都塞进一个大字符串中有一个固有的缺陷。问题是,当您不希望包含时,包含可能返回true。如果usernames已经包含“ Robert”并且要检查的新名称是“ Rob”怎么办?现在,Rob无法输入他的名字,因为它与Robert冲突。

另一个例子:如果您执行不区分大小写的检查,那么如果usernames已经包含“ Elizabeth”,则“ Liz”或“ Beth”将返回true。

更好的设计是拥有单个名称的集合。虽然这可能是List<string>,但我认为Hashset<string>更适合您的需求。如果要使搜索区分大小写,即“ bob”和“ Bob”是2个不同的名称,则无需执行任何特殊操作:

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

但是如果您确实希望名称不区分大小写,则可以相应地声明您的哈希集:

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

哈希集也具有Contains方法,但已针对快速查找进行了优化。有关哈希集的更多信息,请参见this link

使用方法更新

OP表示他不能使用Hashset。这是初学者的绊脚石。刚开始时,我们都为之绊倒了。要使用某些对象,您可能需要完全限定它们的资格,这会使您的代码看起来难看,或者在名称空间之前添加适当的using

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

  • StringComparer类来自System

您可以使用System.Collections.Generic.Hashset<string>,但这似乎有些罗word和丑陋。而是在您的命名空间之前添加以下语句:

using System;
using System.Collections.Generic;

并且Hashset和StringComparer应该可以正常工作。

有关StringComparer的更多信息,请参见this link。>

© www.soinside.com 2019 - 2024. All rights reserved.