FLUTTER - 检查一个字符串是否包含另一个字符串
FLUTTER - Checking if a string contains another one
我正在开发一款英语词汇学习应用程序。提供给用户的一些练习是书面测验。他们必须将法语单词翻译成英语单词,反之亦然。
为了使检查比“1”或“0”(TypedWord == expectedWord) 更复杂一些,我一直在研究字符串之间的相似性并且效果很好(例如拼写错误)。
我也用过contains功能,所以比如用户在预期的词前面加了一篇文章,它不会认为是错误的。 (例如:Ecole(应该是学校),但用户写的是“A school”)。
所以我正在检查诸如“if (typedWord.contains(word)==true) then...”之类的行。它适用于文章问题。
但它提示另一个问题:
例如:一根树枝 --> 预期的法语单词是“branche”。如果用户键入“une branche”,它认为它是正确的,这很好。但是,如果用户键入“débrancher”(拔出插头),它认为它是正确的,并且“branche”这个词是“débrancher”的一部分...
我怎样才能避免这种情况发生?有其他解决方法吗?
我阅读了三个非常有趣的建议答案。问题是有些词是复合词......“例如:厨房用具,园林工具”等......所以我认为“space”功能可能有问题......
您可以检查正确单词前后的空格:类似于 if (typedWord.contains(' '+word+' ')==true) then...
,这样“débrancher”就会被标记为错误。不过,这有点严格:如果句子必须用标点符号完成,则此检查将拒绝它。您可能需要一些允许标点符号但不允许空格的正则表达式。
在这种情况下,用“space”分隔整个答案,然后将其与正确的单词进行比较。
For an example:
User's answer: That is my school
Separate it with space, so that you will find an array of words:
that, is, my, school.
然后将每个单词与您的单词进行比较。它会给你正确的答案。
flutter代码如下:
usersAnswer?.split(" ").forEach((word){
if(word == correctAnswer)
print("this is a correct answer");
});
您可以按 space 拆分字符串并检查生成的数组是否包含您要查找的单词。
typedWord.split(' ').contains('debranche');
所以如果 typedWord
是 'une branchethe
split(' ') 将把它变成这个数组:['une', 'branche']
。
现在,当您检查此数组是否 contains('branche')
时,它将检查确切的字符串分支是否存在,在本例中它确实存在,并且 return 为真。
但是,如果它是 'une debranche',则结果数组将是:['une', 'debranche']
,并且因为此数组没有等于 'branche' 的值,所以它将 return 为假。请记住,当您使用 split
时,它会将字符串转换为数组,并通过在数组上使用 contains
来检查是否存在与您提供的 contains
值完全相同的项目,而在字符串中,它检查该字符串的一部分是否与给定值匹配。
我正在开发一款英语词汇学习应用程序。提供给用户的一些练习是书面测验。他们必须将法语单词翻译成英语单词,反之亦然。
为了使检查比“1”或“0”(TypedWord == expectedWord) 更复杂一些,我一直在研究字符串之间的相似性并且效果很好(例如拼写错误)。
我也用过contains功能,所以比如用户在预期的词前面加了一篇文章,它不会认为是错误的。 (例如:Ecole(应该是学校),但用户写的是“A school”)。
所以我正在检查诸如“if (typedWord.contains(word)==true) then...”之类的行。它适用于文章问题。 但它提示另一个问题:
例如:一根树枝 --> 预期的法语单词是“branche”。如果用户键入“une branche”,它认为它是正确的,这很好。但是,如果用户键入“débrancher”(拔出插头),它认为它是正确的,并且“branche”这个词是“débrancher”的一部分...
我怎样才能避免这种情况发生?有其他解决方法吗?
我阅读了三个非常有趣的建议答案。问题是有些词是复合词......“例如:厨房用具,园林工具”等......所以我认为“space”功能可能有问题......
您可以检查正确单词前后的空格:类似于 if (typedWord.contains(' '+word+' ')==true) then...
,这样“débrancher”就会被标记为错误。不过,这有点严格:如果句子必须用标点符号完成,则此检查将拒绝它。您可能需要一些允许标点符号但不允许空格的正则表达式。
在这种情况下,用“space”分隔整个答案,然后将其与正确的单词进行比较。
For an example:
User's answer: That is my school
Separate it with space, so that you will find an array of words:
that, is, my, school.
然后将每个单词与您的单词进行比较。它会给你正确的答案。
flutter代码如下:
usersAnswer?.split(" ").forEach((word){
if(word == correctAnswer)
print("this is a correct answer");
});
您可以按 space 拆分字符串并检查生成的数组是否包含您要查找的单词。
typedWord.split(' ').contains('debranche');
所以如果 typedWord
是 'une branchethe
split(' ') 将把它变成这个数组:['une', 'branche']
。
现在,当您检查此数组是否 contains('branche')
时,它将检查确切的字符串分支是否存在,在本例中它确实存在,并且 return 为真。
但是,如果它是 'une debranche',则结果数组将是:['une', 'debranche']
,并且因为此数组没有等于 'branche' 的值,所以它将 return 为假。请记住,当您使用 split
时,它会将字符串转换为数组,并通过在数组上使用 contains
来检查是否存在与您提供的 contains
值完全相同的项目,而在字符串中,它检查该字符串的一部分是否与给定值匹配。