字符串判断更快的方法,谢谢

zhenghq1001 2013-02-04 04:48:15
string str = "0702110409"; (实际上没有10)

string str = "0702101109"; (实际上没有01)


string str = "0702011209"; (实际上没有11)

(str实际上是由01、02、03、04、05、06、07、08、09、10、11、12任意五个组成)

判断str里是否包含string target = 01或02或03或04或05或06或07或08或09或10或11或12里的任意一个

刚才,各位老师提示说用:

str.Contains(target)
str.IndexOf(target)

但是,对于01或11或10的判断,会有问题

但如果用List<string> 效率低,有更好的方法吗?谢谢
...全文
138 18 点赞 打赏 收藏 举报
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhq1001 2013-02-04
哦,明白了,问题解决了,速度的确快了很多很多很多很多,谢谢gxingmin老师 为什么用List<string>会影响速度呢?
  • 打赏
  • 举报
回复
gxingmin 2013-02-04
引用 15 楼 zhq1001 的回复:
List<List<string>> nums = new List<List<string>>();
这肯定不行啊 nums[r-2][0]这个是string类型 nums[r-2][0][0]这个才是char类型
  • 打赏
  • 举报
回复
gxingmin 2013-02-04
引用 13 楼 zhq1001 的回复:
我的grp 是这样定义的 List<string> grp = new List<string>();
这个没事 grp[c-7]会自动是string类型 grp[c-][n]是char类型 目测nums[r-2]不是string类型的
  • 打赏
  • 举报
回复
zhq1001 2013-02-04
List<List<string>> nums = new List<List<string>>();
  • 打赏
  • 举报
回复
gxingmin 2013-02-04
目测nums[r-2]不是string类型的
  • 打赏
  • 举报
回复
zhq1001 2013-02-04
我的grp 是这样定义的 List<string> grp = new List<string>();
  • 打赏
  • 举报
回复
gxingmin 2013-02-04
你把我定义的那个函数复制进去 直接这样判断不行吗? if(Find(grp[c-7],nums[r-2])) //找到 else //没找到
  • 打赏
  • 举报
回复
gxingmin 2013-02-04
真奇怪 把你代码贴出来,帮你看看错在哪儿了
  • 打赏
  • 举报
回复
zhq1001 2013-02-04


grp[c-7] 相当于 str
nums[r - 2] 相当于 target
  • 打赏
  • 举报
回复
zhq1001 2013-02-04
错误: 运算符"=="无法应用于"char"和"string"类型的操作数
  • 打赏
  • 举报
回复
catchdream 2013-02-04

        public static bool Find(string str, string target)
        {
            return Regex.Matches(str, @"\d{2}").Cast<Match>().Select(x => x.Value).Contains(target);
        }
  • 打赏
  • 举报
回复
引用 1 楼 gxingmin 的回复:
晕,这样不是可以吗?怎么又开贴了 C# code?12345678910 public bool Find(string str, string target) { for (int n = 0; n < str.Length - 1; n += 2) { if ……
这个是对的。。。。
  • 打赏
  • 举报
回复
gxingmin 2013-02-04
引用 5 楼 zhq1001 的回复:
引用 1 楼 gxingmin 的回复:晕,这样不是可以吗?怎么又开贴了 C# code?12345678910 public bool Find(string str, string target) { for (int n = 0; n < str.Length - 1; n += 2) ……
能运行起来吗?是不是编译器没刷新过来啊 我这边是可以的啊,字符串查找线性循环是最快的
  • 打赏
  • 举报
回复
zhq1001 2013-02-04
引用 1 楼 gxingmin 的回复:
晕,这样不是可以吗?怎么又开贴了 C# code?12345678910 public bool Find(string str, string target) { for (int n = 0; n < str.Length - 1; n += 2) { if ……
老师,是这样的 我的string target = "10"; 按您的写法 target[0],target[1],下面出现红色波浪线,我错在哪里呢?
  • 打赏
  • 举报
回复
dalmeeme 2013-02-04
判断有没有01、02、03、04、05:
		string[] ss = { "01", "02", "03", "04", "05" };
		string str = "0702110409";
		bool r = Regex.Matches(str, @"\d{2}").Cast<Match>().Select(x => x.Value).Any(x => ss.Contains(x));
		Response.Write(r);
  • 打赏
  • 举报
回复
string str = "0702110409"; string str2="数字"; bool t=Regex.IsMatch(str,@"(?<=(\d{2})*)"+str2);
  • 打赏
  • 举报
回复
dalmeeme 2013-02-04
判断有没有10: string str = "0702110409"; bool r = Regex.Matches(str, @"\d{2}").Cast<Match>().Select(x => x.Value).Contains("10"); Console.WriteLine(r);
  • 打赏
  • 举报
回复
gxingmin 2013-02-04
晕,这样不是可以吗?怎么又开贴了
  
       public bool  Find(string str, string target)
        {
            for (int n = 0; n < str.Length - 1; n += 2)
            {
                if (str[n] == target[0] && str[n + 1] == target[1])
                    return true;
            }
            return false;
        }
bool b1=Find("0702110409","10"); //结果是false bool b2=Find("0702110409","11"); //结果是true
  • 打赏
  • 举报
回复
相关推荐
发帖
C#
加入

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2013-02-04 04:48
社区公告

让您成为最强悍的C#开发者