Flutter 使用省道/颤振对列表中的一根弦进行部分比较

Flutter 使用省道/颤振对列表中的一根弦进行部分比较,flutter,dart,Flutter,Dart,对于颤振的世界来说是相当陌生的,我一直在寻找一种内置方法,它可以部分匹配一个字符串值和一个列表中的整个字符串集。例如 假设我在查询字符串“农舍边,凉拌卷心菜” determineFood(字符串类别){ 列表类别数组=[]; var breakFastWords=[“华夫饼”、“吐司”、“煎饼”、“煎蛋饼”、“煎蛋饼”]; var午餐词=[“沙拉”、“三明治”、“汤”、“汉堡”、“意大利面”、“陀螺”、“豪吉”]; var dinnerWords=[“汉堡”、“牛排”、“猪肉”、“排骨”]; v

对于颤振的世界来说是相当陌生的,我一直在寻找一种内置方法,它可以部分匹配一个字符串值和一个列表中的整个字符串集。例如

假设我在查询字符串“农舍边,凉拌卷心菜”

determineFood(字符串类别){
列表类别数组=[];
var breakFastWords=[“华夫饼”、“吐司”、“煎饼”、“煎蛋饼”、“煎蛋饼”];
var午餐词=[“沙拉”、“三明治”、“汤”、“汉堡”、“意大利面”、“陀螺”、“豪吉”];
var dinnerWords=[“汉堡”、“牛排”、“猪肉”、“排骨”];
var侧词=[“调味品”、“饮料”、“芥末”、“果冻”、“花生”、“凉拌卷心菜”];
测试(字符串值)=>value.contains(类别);
如果(早餐词。任何(测试))
{
添加(“早餐”);
}
即使使用带有test(String value)的函数,而不是直接将字符串与带有“contains”的列表进行比较,我也无法获得匹配,除非两个字符串完全匹配(即仅“coleslaw”和“coleslaw”)


有人能提出更好的方法吗?

有几种方法可以做到这一点。一种方法与您所做的非常接近;但是您需要在匹配字符串之前调用
.toLowerCase()
。另一种方法是使用regex,您可以告诉它忽略大小写

下面是一个例子:

final breakfastWords = ["waffle", "toast", "pancake", "omelette", "Omelet"];
final lunchWords = ["salad", "sandwich", "soup", "burger", "pasta", "gyro", "hoagie"];
final dinnerWords = ["burger", "steak", "pork", "ribs"];
final sideWords = ["dressing", "drink", "mustard", "jelly", "peanuts", "coleslaw"];
final sideReg =  RegExp("(?:dressing|drink|mustard|jelly|peanuts|coleslaw)", caseSensitive: false);

bool isBreakfast(String string) {
  String toTest = string.toLowerCase();
  return breakfastWords.any((word) => toTest.contains(word));
}

bool isLunch(String string) {
  String toTest = string.toLowerCase();
  return lunchWords.any((word) => toTest.contains(word));
}

bool isDinner(String string) {
  String toTest = string.toLowerCase();
  return dinnerWords.any((word) => toTest.contains(word));
}

bool isSide(String string) {
  String toTest = string.toLowerCase();
  return sideWords.any((word) => toTest.contains(word));
}

bool isSideRegex(String string) {
  return sideReg.hasMatch(string);
}

void main() {
  String testString = "Farmhouse Sides, Coleslaw";
  
  if(isBreakfast(testString)) {
    print("It's breakfast");
  }
  
  if(isLunch(testString)) {
    print("It's lunch");
  }
  
  if(isDinner(testString)) {
    print("It's dinner");
  }
  
  if(isSide(testString)) {
    print("It's a side");
  }
  
  if(isSideRegex(testString)) {
    print("It's a side found with regex");
  }
}final breakfastWords = ["waffle", "toast", "pancake", "omelette", "Omelet"];
final lunchWords = ["salad", "sandwich", "soup", "burger", "pasta", "gyro", "hoagie"];
final dinnerWords = ["burger", "steak", "pork", "ribs"];
final sideWords = ["dressing", "drink", "mustard", "jelly", "peanuts", "coleslaw"];
final sideReg =  RegExp("(?:dressing|drink|mustard|jelly|peanuts|coleslaw)", caseSensitive: false);

bool isBreakfast(String string) {
  String toTest = string.toLowerCase();
  return breakfastWords.any((word) => toTest.contains(word));
}

bool isLunch(String string) {
  String toTest = string.toLowerCase();
  return lunchWords.any((word) => toTest.contains(word));
}

bool isDinner(String string) {
  String toTest = string.toLowerCase();
  return dinnerWords.any((word) => toTest.contains(word));
}

bool isSide(String string) {
  String toTest = string.toLowerCase();
  return sideWords.any((word) => toTest.contains(word));
}

bool isSideRegex(String string) {
  return sideReg.hasMatch(string);
}

void main() {
  String testString = "Farmhouse Sides, Coleslaw";
  
  if(isBreakfast(testString)) {
    print("It's breakfast");
  }
  
  if(isLunch(testString)) {
    print("It's lunch");
  }
  
  if(isDinner(testString)) {
    print("It's dinner");
  }
  
  if(isSide(testString)) {
    print("It's a side");
  }
  
  if(isSideRegex(testString)) {
    print("It's a side found with regex");
  }
}
还请注意,您可以直接从字符串形成正则表达式:


final sideReg=RegExp((?:${sideWords.join(|)),区分大小写:false);

您可以先将这两个字符串转换为所有小写,然后再匹配它们。
final breakfastWords = ["waffle", "toast", "pancake", "omelette", "Omelet"];
final lunchWords = ["salad", "sandwich", "soup", "burger", "pasta", "gyro", "hoagie"];
final dinnerWords = ["burger", "steak", "pork", "ribs"];
final sideWords = ["dressing", "drink", "mustard", "jelly", "peanuts", "coleslaw"];
final sideReg =  RegExp("(?:dressing|drink|mustard|jelly|peanuts|coleslaw)", caseSensitive: false);

bool isBreakfast(String string) {
  String toTest = string.toLowerCase();
  return breakfastWords.any((word) => toTest.contains(word));
}

bool isLunch(String string) {
  String toTest = string.toLowerCase();
  return lunchWords.any((word) => toTest.contains(word));
}

bool isDinner(String string) {
  String toTest = string.toLowerCase();
  return dinnerWords.any((word) => toTest.contains(word));
}

bool isSide(String string) {
  String toTest = string.toLowerCase();
  return sideWords.any((word) => toTest.contains(word));
}

bool isSideRegex(String string) {
  return sideReg.hasMatch(string);
}

void main() {
  String testString = "Farmhouse Sides, Coleslaw";
  
  if(isBreakfast(testString)) {
    print("It's breakfast");
  }
  
  if(isLunch(testString)) {
    print("It's lunch");
  }
  
  if(isDinner(testString)) {
    print("It's dinner");
  }
  
  if(isSide(testString)) {
    print("It's a side");
  }
  
  if(isSideRegex(testString)) {
    print("It's a side found with regex");
  }
}final breakfastWords = ["waffle", "toast", "pancake", "omelette", "Omelet"];
final lunchWords = ["salad", "sandwich", "soup", "burger", "pasta", "gyro", "hoagie"];
final dinnerWords = ["burger", "steak", "pork", "ribs"];
final sideWords = ["dressing", "drink", "mustard", "jelly", "peanuts", "coleslaw"];
final sideReg =  RegExp("(?:dressing|drink|mustard|jelly|peanuts|coleslaw)", caseSensitive: false);

bool isBreakfast(String string) {
  String toTest = string.toLowerCase();
  return breakfastWords.any((word) => toTest.contains(word));
}

bool isLunch(String string) {
  String toTest = string.toLowerCase();
  return lunchWords.any((word) => toTest.contains(word));
}

bool isDinner(String string) {
  String toTest = string.toLowerCase();
  return dinnerWords.any((word) => toTest.contains(word));
}

bool isSide(String string) {
  String toTest = string.toLowerCase();
  return sideWords.any((word) => toTest.contains(word));
}

bool isSideRegex(String string) {
  return sideReg.hasMatch(string);
}

void main() {
  String testString = "Farmhouse Sides, Coleslaw";
  
  if(isBreakfast(testString)) {
    print("It's breakfast");
  }
  
  if(isLunch(testString)) {
    print("It's lunch");
  }
  
  if(isDinner(testString)) {
    print("It's dinner");
  }
  
  if(isSide(testString)) {
    print("It's a side");
  }
  
  if(isSideRegex(testString)) {
    print("It's a side found with regex");
  }
}