Java |比较char数组中的char字

时间:2010-07-18 09:07:21

标签: java char search

如何获取可在段落中找到的单个单词的索引(在char数组中表示)(再次表示在char数组中)。

char表示单词

char word[] = new char[]{'w','o','r','d'};

这是段落

char para[] = new char[]{'f','g','q','z','y','i','o','p','w','o','r','d'};

我想获得本案例中第一个字母的索引8。我在对词语进行排序时使用了二进制搜索。

感谢。

5 个答案:

答案 0 :(得分:5)

理论上有点低效,但实用又简单:

int position = new String(paragraph).indexOf(new String(word));

如果您想了解其工作原理,请查看java.lang.String的{​​{3}}方法

答案 1 :(得分:2)

在这种情况下,二进制搜索不会帮助您。你必须线性搜索。最简单的解决方案是线性搜索第一个字符,找到后检查剩下的字是否跟随。

更精细的解决方案是使用KMP algorithm

答案 2 :(得分:1)

最简单的方法就是尝试所有可能性,循环遍历每个起始点并测试所有字符是否匹配。事实上你已经提到了二元搜索,这可能很简单,你已经知道了,但请告诉我你是否正在寻找它。

如果您正在寻找最佳方法,请参阅http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm

答案 3 :(得分:1)

您可以将字符数组转换为字符串。在字符串中搜索的结果与搜索数组的结果相同。

String needle = new String(word);
String haystack = new String(para);
int i = haystack.indexOf(needle);

结果:

8

这可能比天真的O(n * m)搜索快得多,因为字符串函数indexOf已经过优化。

如果您想在不创建临时字符串的情况下执行此操作,则可以为字节数组实现string searching algorithm。例如,您可以选择具有最差情况O(n)的Boyer-Moore算法。

答案 4 :(得分:0)

快速回答,我想其他人会更精细。最初,我会做这样的事情(伪代码更适合考虑算法):

boolean nonmatchingchar
integer i, j
for each i of word until endof word
    for each j of para until endof para
      if word i isnotequalto para i set nonmatchingchar true     
    end for
end for


if nonmatchingchar is true print "character sequence not found"

编辑:为了在你需要搜索多个单词的情况下提高效率,可以构成一个二维数组,其中的单词按照第一个字母排序。从那以后,你可以逐字逐句地查看第二个数组,并根据那封信测试一个单词的子集。