初学者 c#根据字符提取单词的问题

时间:2022-09-07 12:01:44
提取字符串a中找字符串b的字母所包换的单词,然后保存到字符串c中。
string a="absorb absorb absorb absorb apple angel badly bad"
string b="a,b"

我把a按空格分开然后每个单词一个字母一个字母分开对比,如果单词多的话速度太慢了。
有没好方法。

上面例子 a中找到 字母a 和b 同时出现的单词取出来(badly)也在内,b,a都在单词里。
现在问题 a中的每个单词的长度不能确定,每个单词是空格分开的。
第二个问题,字符串b中的字母的长度也不能确定 有可能找单个字母,有可能三个  "a,b"和"b,a"的结果一样。
也有可能"a,b,e"
谢谢各位。菜鸟如果单词有几百个或几千个,用split,substring 一个一个拆开对比速度有点慢。

6 个解决方案

#1


用ling做可能效率更高

#2


你想要优化运行效率可以自己写一个状态机。
可以实现O(N*M)的效率,其中N是字符串a的长度,M是字符串b中的字符个数。

还很适合初学者练手:)

#3


据我所知,万个以下楼主举例的那种单词串用split一次性劈开花不了多久。用substring更快。所以不明白楼主多久算快。
如果想更快,建议按二进制逐个判读空格符来取单个字符,再用stringbuilder拼接。如果还想更快,用c++写类似的函数来做。

#4


            string a="absorb absorb absorb absorb apple angel badly bad";
            string b = "a,b";
            var p = "(?=.*" + string.Join(")(?=.*", b.Split(',')) + ").*";
            foreach(var x in a.Split(' '))
                if(Regex.IsMatch(x, p)) Console.WriteLine(x);
初学者 c#根据字符提取单词的问题
测试数据不要重复,应把各种情况都考虑到

#5


引用 4 楼 xuzuning 的回复:
            string a="absorb absorb absorb absorb apple angel badly bad";
            string b = "a,b";
            var p = "(?=.*" + string.Join(")(?=.*", b.Split(',')) + ").*";
            foreach(var x in a.Split(' '))
                if(Regex.IsMatch(x, p)) Console.WriteLine(x);
初学者 c#根据字符提取单词的问题
测试数据不要重复,应把各种情况都考虑到
初学者 c#根据字符提取单词的问题
版主  这个出现一个问题了 ,比如这个例子单词里面ab ba 这样出现才能找到单词,如果 axxxbxx  ,这样的单词取不出来了?就是意思a和b令居的时候。

#6


看错了版主不好意思,我不仔细。。。谢谢。

#1


用ling做可能效率更高

#2


你想要优化运行效率可以自己写一个状态机。
可以实现O(N*M)的效率,其中N是字符串a的长度,M是字符串b中的字符个数。

还很适合初学者练手:)

#3


据我所知,万个以下楼主举例的那种单词串用split一次性劈开花不了多久。用substring更快。所以不明白楼主多久算快。
如果想更快,建议按二进制逐个判读空格符来取单个字符,再用stringbuilder拼接。如果还想更快,用c++写类似的函数来做。

#4


            string a="absorb absorb absorb absorb apple angel badly bad";
            string b = "a,b";
            var p = "(?=.*" + string.Join(")(?=.*", b.Split(',')) + ").*";
            foreach(var x in a.Split(' '))
                if(Regex.IsMatch(x, p)) Console.WriteLine(x);
初学者 c#根据字符提取单词的问题
测试数据不要重复,应把各种情况都考虑到

#5


引用 4 楼 xuzuning 的回复:
            string a="absorb absorb absorb absorb apple angel badly bad";
            string b = "a,b";
            var p = "(?=.*" + string.Join(")(?=.*", b.Split(',')) + ").*";
            foreach(var x in a.Split(' '))
                if(Regex.IsMatch(x, p)) Console.WriteLine(x);
初学者 c#根据字符提取单词的问题
测试数据不要重复,应把各种情况都考虑到
初学者 c#根据字符提取单词的问题
版主  这个出现一个问题了 ,比如这个例子单词里面ab ba 这样出现才能找到单词,如果 axxxbxx  ,这样的单词取不出来了?就是意思a和b令居的时候。

#6


看错了版主不好意思,我不仔细。。。谢谢。