检查一个字母是否在一个字母(单词)中,它的位置是什么?

时间:2012-03-23 21:33:28

标签: java

我有一个方法,一个字母(字符串\ char?)作为参数,一个字一次处于活动状态。我想看看这一个字母是否在当时活跃的单词中。

这可能已经得到了更好的解释。也许代码可以解决问题:

public void checkLetter(String letter){
        for(int i = 0; i<activeWord.length(); i++){
            if(letter.equals(activeWord.[i])){
                // Run a method which gives the user a correct letter pushed.
                }
                else {
                    String failed = "Could not find the letter in the active word.";
                    // Run a method which gives the user one wrong letter pushed.
                }
            }           
    }

所以,这将是一个用于Android的刽子手游戏,我正在制作乐趣。现在我有图像作为字母。按下字母(图像)时,此方法运行,推送的字母将成为参数。

有没有人有什么好主意我怎么能知道这封信是否在单词中,以及它在哪个位置?

我希望得到一些帮助:)

编辑:顺便说一句,当前代码每次都返回int,因为[i]是一个int。这是为了让代码返回一个字符串。在将它们与另一个字符串相等之前,我是否必须将单词拆分为字母? 感谢。

5 个答案:

答案 0 :(得分:4)

使用String.indexOf()

String myString = "word";
myString.indexOf("w"); // this returns 0;
myString.indexOf("h"); // this returns -1

这只会给你字符串中第一次出现字母的位置。要获得其他位置,您需要从最后一个位置获取子串并重复该过程。

答案 1 :(得分:1)

您正在寻找String.indexOf

int pos = activeWord.indexOf(letter);
if (pos == -1) {
    // letter not found
}
else {
    // letter exists at zero-based position pos
    // CAUTION: it might also exist in later positions!
}

答案 2 :(得分:1)

使用String.indexOf(String s),它返回第一次出现的索引,如果找不到则返回-1

答案 3 :(得分:1)

使用String的方法

int i = 0;
while(word.indexOf(i, letter) != -1) {
   i = word.indexOf(i, letter) + 1;
   //Do whatever
}

if(i == 0) {
   //Handle missed letter 
}

答案 4 :(得分:0)

每日WTF启发的暴力强制正则表达式解决方案怎么样?否则只需使用String.indexOf(char)...

String input = "Hello world";
char test = 'o';

int found = -1;
for (int i = 0; i < input.length(); i++) {
    StringBuilder builder = new StringBuilder();
    for (int c = 0; c < input.length(); c++) {
        if (c == i) {
            builder.append(test);
        } else {
            builder.append(".");
        }
    }
    Pattern p = Pattern.compile(builder.toString());
    if (p.matcher(input).find()) {
        found = i;
        break;
    }
}
System.out.println(found);