Java 数组只检测输入字的一部分,而不是整个字
我的Android应用程序有一个问题,它是一个使用语音识别和谷歌TTS的应用程序。就像SIRI的客户一样。正如您在这里看到的,当用户说出数组中给定的单词时:Java 数组只检测输入字的一部分,而不是整个字,java,android,arrays,string,Java,Android,Arrays,String,我的Android应用程序有一个问题,它是一个使用语音识别和谷歌TTS的应用程序。就像SIRI的客户一样。正如您在这里看到的,当用户说出数组中给定的单词时: String[] g = { "hallo", "heey", "hoi", "hey", "he", "hee", "hay" }; for (String strings : g) { if (mostLikelyThingHeard.contains(strings)) { String[] array = {
String[] g = { "hallo", "heey", "hoi", "hey", "he", "hee", "hay" };
for (String strings : g) {
if (mostLikelyThingHeard.contains(strings)) {
String[] array = { "leuk dat je er bent", "heeyy" };
String randomStr = array[new Random()
.nextInt(array.length)];
tts.speak(randomStr, TextToSpeech.QUEUE_FLUSH, null);
return;
}
}
String[] f = { "haha", "hah", "ha" };
for (String strings : f) {
if (mostLikelyThingHeard.contains(strings)) {
String[] array = { "haha leuk grapje", "hiehaho" };
String randomStr = array[new Random()
.nextInt(array.length)];
tts.speak(randomStr, TextToSpeech.QUEUE_FLUSH, null);
return;
}
}
一切正常,但当用户说“你好”时,它首先检测到前两个字符“哈”。这在字符串数组“f”中提到。所以这很烦人,整个单词没有被检测到,只是其中的一部分
当我像这样交换两个字符串数组时:
String[] f = { "haha", "hah", "ha" };
for (String strings : f) {
if (mostLikelyThingHeard.contains(strings)) {
String[] array = { "haha leuk grapje", "hiehaho" };
String randomStr = array[new Random()
.nextInt(array.length)];
tts.speak(randomStr, TextToSpeech.QUEUE_FLUSH, null);
return;
}
}
String[] g = { "hallo", "heey", "hoi", "hey", "he", "hee",
"hay" };
for (String strings : g) {
if (mostLikelyThingHeard.contains(strings)) {
String[] array = { "leuk dat je er bent", "heeyy" };
String randomStr = array[new Random()
.nextInt(array.length)];
tts.speak(randomStr, TextToSpeech.QUEUE_FLUSH, null);
return;
}
}
然后它会首先检测到“你好”而不是“哈”
但是,如果我制作了100多个数组,这会很烦人,那么我如何让java使用数组中的最佳匹配字,而不仅仅是一部分
我知道这很难理解,但如果你们不理解,请查看我的来源:
编辑:
当我改变
contains
到
我解决了这个问题,但现在我有了一个新问题:
如果我创建一个数组,如:
"I am"
当用户说:“我是Giovanni”时,我们遇到了一个问题,即“我是”不再被检测到,这是由于
编辑2
我想这可以通过将“我是乔瓦尼”这个词拆分成“我是乔瓦尼”来解决,但如何解决呢?而不是
mostLikelyThingHeard.contains(strings)
使用:
包含对前面提到的字符串子序列的检查。因此,如果您的字符串是“hallo”,那么
“hallo”。contains(“ha”)
在hallo中搜索ha,是的ha在hallo中,因此您的问题。我不知道这是否可行,例如,如果我有100个数组,它会检测整个单词而不是部分字符吗?是的,它会比较整个单词。所以如果你的字符串是hallo,数组中有ha和hallo,它会找到hallo而不是ha。试试看。好的,我在家的时候会试试看:我通过将contains改为equals来管理它。但是现在另一个问题是每个句子都必须完全相同你说的句子必须相同是什么意思?
mostLikelyThingHeard.contains(strings)
Arrays.sort(g);
int index = Arrays.binarySearch(g, mostLikelyThingHeard);
if (index >= 0) {
System.out.println("I heard it properly and its ", g[index]);
}