为什么Java String indexOf失败?

时间:2010-03-31 17:37:44

标签: java string

这一定很简单,但我遇到了很大的困难。你看我试图在另一个字符串中找到一个字符串,如下所示。

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

整数e和s返回-1,因为它未找到,这导致replace方法失败。我使用的测试字符串是"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 个答案:

答案 0 :(得分:3)

System.out.println("!Chartered Certified<!--lol--> Accountants (ACCA)".indexOf("-->"));

打印27

所以你的输入字符串不能是你期望的

答案 1 :(得分:3)

 String input = "Chartered Certified<!--lol--> Accountants (ACCA)";
 int e = input.indexOf("-->");
 int s = input.indexOf("<!--");

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

产量

  

26 19

所以我认为其他地方有错误,中间还有其他代码吗?

答案 2 :(得分:1)

字符串“特许公认会计师(ACCA)”不包含“ - &gt;”或“&lt;! - ”,因此es将始终为-1。

答案 3 :(得分:0)

也许你是从一种xml解析器中获取字符串并在渲染时隐藏注释字符串。检查indexOf调用之前的输入字符串是否确实包含'<!--''-->'字符串。

答案 4 :(得分:0)

我使用命令行参数快速运行测试。它运作得很好。这是代码/结果:

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

答案 5 :(得分:0)

此代码应该有效,还有一些其他问题。您应该将其编码为安全,但如下所示。

e = input.indexOf("-->");
s = input.indexOf("<!--");
if (e > -1 && s > -1 && e > s + 4) {
    input = input.replace(input.substring(s, e + "-->".length()), " ");
}

答案 6 :(得分:0)

您的代码似乎没问题。所以,如果它失败了。可能是它解析的字符串不是你想象的那样。字符串来自哪里?尝试在解析之前打印字符串以查看它实际上是什么。