Array仅检测输入字中的一部分而不是整个字

时间:2014-12-09 12:05:04

标签: java android arrays string

我的Android应用中存在问题,它是使用语音识别和Google TTS的应用。它就像一个SIRI客户端。正如您在此处看到的那样,当用户说出数组中给出的单词时:

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;
    }
}

一切正常,但当用户说" hallo"它检测前两个字符" ha"第一。字符串数组中提到了f' 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;
    }
}

然后它确实检测到了#hal;"首先而不是" ha"

但是如果我制作超过100个数组这会很烦人,那么我怎样才能让java使用数组中最匹配的单词而不只是一个部分呢?

我知道这很难理解,但如果你们不明白,请看我的来源: http://github.com/gi097/PWS

编辑:

当我改变

contains

equals

我解决了这个问题,但现在我又找到了一个新问题:

如果我创建一个像:

这样的数组
"I am"

当用户说:"我是Giovanni"我们遇到的问题是"我是"由于等于......所以没有被检测到。

EDIT2

它可以修复我认为分裂大多数喜欢的东西"我是Giovanni"到"我" "是" "乔瓦尼"但是如何?

1 个答案:

答案 0 :(得分:0)

而不是

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]);
}

包含对here所提及的字符串子序列的检查。因此,如果你的字符串是“hallo”,那么"Hallo".contains("ha")在hallo中搜索ha,是的ha是在hallo中,因此是你的问题。