[问题] 字串比对

楼主: sqrt1089 (李崩子)   2015-11-20 17:05:41
如题
目前小弟字串比对的方式是
String.IndexOf(UserInput,StringComparison.OrdinalIgnoreCase) >= 0
这个语法
譬如:
String = 忠孝东路5段与基隆路交叉口
UserInput = 忠孝东路 or 基隆路。
都是 true
问题如果我想要多重比对要怎做到 (小弟目前是暴力硬干法)
以下是小弟的部分语法
Address.text = "忠孝东路 基隆路"
string[] UserArray = Address.text.split(' ');//空格Split
if (UserArray.lenhth == 1)//假设使用者只输入一个关键字
{
if(String.IndexOf(UserArray[0],StringComparison.OrdinalIgnoreCase) >= 0)
{
//do something
}
}
else if (UserArray.lenhth == 2)//假设使用者输入两个关键字
{
if ( UserArray[0]比对一次 && UserArray[1]比对一次)
{
//do something
}
}
感谢大家收看
作者: WindOfNet   2015-11-20 17:44:00
UserArray.All(q => "忠孝东路5段...".Contains(q));全部符合才会true,不晓得是不是你要的?
作者: bantime (景)   2015-11-22 02:09:00
如果先将使用者输入的字串做处理(去除空白 + 分割这样)然后再比对呢?
作者: TameFoxx (foxx)   2015-11-23 09:22:00
用两个foreach包起来就可以了第一个foreach跑全部的data 第二个foreach跑分割出来的关键字比对的时候如果有符合关键字 count就+1当count=关键字的count 就代表全部符合这样不管使用者输入几个关键字都能跑
楼主: sqrt1089 (李崩子)   2015-11-23 10:11:00
感谢楼上的解答
作者: TameFoxx (foxx)   2015-11-23 16:16:00
其实一楼的方法就可以用了 可能你没有看懂他的意思用一个foreach检查所有data地址然后userArray.All(x=>data.contains(x))如果全部项目都有符合 就会回传true 这笔data即符合搜寻条件这样程式看起来会简洁多
作者: bantime (景)   2015-11-23 16:39:00
楼上 问题是原PO希望部分符合的时候也做事情如果用All 就会是完全符合才回传现在玩家输入3个关键字 可能符合一笔或两笔才做事情那玩家输入8笔的时候 要符合几笔才做事情?
作者: TameFoxx (foxx)   2015-11-23 18:33:00
哦哦,I see
作者: bantime (景)   2015-11-23 20:21:00
我发现我有职业病= = 都称使用者为玩家..
作者: kyo0010 (~KYO~)   2015-11-24 17:41:00
把要查询的字转为ASCII,在用regex可以快速解决
作者: Litfal (Litfal)   2015-11-26 03:36:00
不管是用字串比对还是regex,资料多起来都很慢ww

Links booklink

Contact Us: admin [ a t ] ucptt.com