Почему не работает Java String indexOf? - PullRequest
2 голосов
/ 31 марта 2010

это должно быть довольно просто, но у меня большие трудности. Вы видите, что я пытаюсь найти строку в другой строке следующим образом.

            e = input.indexOf("-->");
            s = input.indexOf("<!--");
            input = input.replace(input.substring(s, e + 3), " ");

Целые числа e и s возвращают -1 в том смысле, что он не был найден, и это вызывает сбой метода замены Я использую тестовую строку "Chartered Certified<!--lol--> Accountants (ACCA)". Я попытался создать новый строковый объект и передать строку в качестве аргумента следующим образом

e=input.indexOf(new String("<!--"));

Это дало тот же результат. Есть идеи?

Это отдельный фрагмент кода, который я написал, и он отлично работает.

public static void main(String[] args) {
    int e = 0;
    int s = 0;
    while (e != -1) {
        //input.replace("\"", "\'");
        e = input.indexOf("-->");
        s = input.indexOf("<!--");
        input = input.replace(input.substring(s, e + 3), " ");
        e = input.indexOf("-->");
        System.out.println(input);
    }
}

Но я не могу понять, почему это не удается, когда я использую эту логику в своем классе действий.

Ответы [ 7 ]

3 голосов
/ 31 марта 2010
 String input = "Chartered Certified<!--lol--> Accountants (ACCA)";
 int e = input.indexOf("-->");
 int s = input.indexOf("<!--");

 System.out.println(e+" "+s);

выходы

26 19

так что я думаю, что где-то есть ошибка, есть другой код в середине?

3 голосов
/ 31 марта 2010
System.out.println("!Chartered Certified<!--lol--> Accountants (ACCA)".indexOf("-->"));

отпечатков 27

То есть ваша входная строка не должна быть такой, как вы ожидаете

1 голос
/ 31 марта 2010

Строка "Дипломированные сертифицированные бухгалтеры (ACCA)" не содержит "->" или "<! -", поэтому <code>e и s всегда будут равны -1.

0 голосов
/ 31 марта 2010

Ваш код, кажется, в порядке. Так что, если это не удастся. может случиться так, что разбираемая строка - это не то, что вы думаете. Откуда взята строка? Попробуйте напечатать строку непосредственно перед ее анализом, чтобы увидеть, что это на самом деле.

0 голосов
/ 31 марта 2010

Этот код должен работать, есть другая проблема. Вы должны кодировать его для безопасности, как показано ниже.

e = input.indexOf("-->");
s = input.indexOf("<!--");
if (e > -1 && s > -1 && e > s + 4) {
    input = input.replace(input.substring(s, e + "-->".length()), " ");
}
0 голосов
/ 31 марта 2010

Я запустил тест очень быстро, используя аргумент командной строки. Работало просто отлично. Вот код / ​​результаты:

public static void main(String[] args) {
    String input = args[0];
    System.out.println(input);
    int e = input.indexOf("-->");
    int s = input.indexOf("<!--");
    input = input.replace(input.substring(s, e + 3), "");
    System.out.println(input);
}

Выход:

Chartered Certified<!--lol--> Accountants (ACCA)
Chartered Certified Accountants (ACCA)

Если вы передавали input в качестве аргумента командной строки, убедитесь, что он указан в кавычках, иначе input будет установлен в Chartered из-за пробелов.

0 голосов
/ 31 марта 2010

Возможно, вы получаете строку из своего рода анализатора xml и скрываете закомментированную строку при рендеринге Убедитесь, что во входной строке перед вызовом indexOf действительно есть строки '<!--' и '-->'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...