2

我需要找到从用户输入派生的 char 值的位置。但是当我不提供要查找的确切字符时, indexOf 方法似乎不起作用。但是由于 char 值是从用户的输入中得出的,所以我无法输入确切的值。有什么方法可以按我需要的方式使用 indexOf 吗?

public class pg2a {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        String host;
        System.out
                .println("Please enter your sequence (any length, any characters):");
        host = keyboard.nextLine();
        System.out.println("Now enter a 3 character sequence:");
        String candidate;
        candidate = keyboard.nextLine();

        int length = candidate.length();
        char a = candidate.charAt(0);
        char b = candidate.charAt(1);
        char c = candidate.charAt(2);
        int i = candidate.indexOf(a);
        int j = candidate.indexOf(b);
        int k = candidate.indexOf(c);

        if (length == 3) {
            if (i == -1)
                System.out
                        .println("The 3 character sequence you entered is not a subsequence of your sequence.");
            else
                System.out.println("Let's go!");
        } else {
            System.out
                    .println("The sequence you entered is not a 3 character sequence.");
        }
    }
}

`

4

3 回答 3

1

您拥有的代码应该将 i 设置为 0,将 j 设置为 1,将 c 设置为 2(假设它们都是不同的字符)。你说“给我第一个字符的索引”,然后是第二个和第三个。我相信你打算这样做host.indexOf(a),等等。

但是,有一种更简单的方法来做你想做的事,那就是使用host.indexOf(candidate),如果候选人在主机中,它应该返回 > -1。

于 2013-02-20T04:22:09.653 回答
0

如果我正确理解了您的问题,则以下几行:

int i = candidate.indexOf(a);
int j = candidate.indexOf(b);
int k = candidate.indexOf(c);

应该

int i = host.indexOf(a);
int j = host.indexOf(b);
int k = host.indexOf(c);

您想查找 a 是否在主机中。a 将永远是候选人。此外,您只检查 a 是否在序列中,而不是 b 和 c

于 2013-02-20T04:22:45.067 回答
0

如果您的目标只是检查是否host包含candidate,那么您可以考虑使用contains方法。

boolean isSubstring = host.contains(candidate);

如果您需要一个从哪里candidate开始的索引,那么下面应该服务于目的。

int startIndex = host.indexOf(candidate);
于 2013-02-20T04:33:11.320 回答