如何提供最佳效果(速度)来检查句子是否包含任何关键字1,关键字2,关键字等。
以下是我的选择:
if(string.contains(item1)||string.contains(item2)||string.contains(item3))
for
失控之前为选项#1构建if-or-or-or
循环。答案 0 :(得分:1)
首先,每个答案都应该在生产条件下进行测试。当性能问题时,RAM和高速缓存大小,总线速度等会发挥作用并使事情难以预测。另一个问题是这个代码运行了多少次--JVM最初将运行它的解释版本,并且只有在代码执行足够多次之后才会用编译(和更快)版本替换它。
话虽如此,这里有一些指示:
Arrays
类的方法查找每个单词。这具有内存局部性的优点。请注意,Unicode在这里可能很棘手,因此您可能需要normalize
它首先。但最重要的是,测试。只需确保您正在进行微观基准properly。
答案 1 :(得分:0)
我建议你使用正则表达式,因为它非常简单和强大
let regionDistance:CLLocationDistance = 100
let coordinates = CLLocationCoordinate2DMake(lat, lon)
let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, regionDistance, regionDistance)
let options = [
MKLaunchOptionsMapCenterKey: NSValue(mkCoordinate: regionSpan.center),
MKLaunchOptionsMapSpanKey: NSValue(mkCoordinateSpan: regionSpan.span),
MKLaunchOptionsDirectionsModeKey: motType = MKLaunchOptionsDirectionsModeDriving
] as [String : Any]
let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: coordinates, addressDictionary: nil))
mapItem.name = placeName
mapItem.openInMaps(launchOptions: options)
STDOUT:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
final String regex = "STRING1|STRING2|STRING3";
final String string = "xxxSTRING1xxxSTRING2xxx";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
在线IDE中的演示:here