Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java字符串indexOf失败了?_Java_String - Fatal编程技术网

为什么Java字符串indexOf失败了?

为什么Java字符串indexOf失败了?,java,string,Java,String,这一定很简单,但我有很大的困难。你看,我试图在另一个字符串中找到一个字符串,如下所示 e = input.indexOf("-->"); s = input.indexOf("<!--"); input = input.replace(input.substring(s, e + 3), " "); e=input.indexOf(“-->”); s=input.indexOf(“accounters(ACCA

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

            e = input.indexOf("-->");
            s = input.indexOf("<!--");
            input = input.replace(input.substring(s, e + 3), " ");
e=input.indexOf(“-->”);
s=input.indexOf(“accounters(ACCA)”
。我试图创建一个新的字符串对象,并将字符串作为参数传入,如下所示

e=input.indexOf(new String("<!--"));
e=input.indexOf(新字符串(“”);
s=输入。indexOf(“”);
系统输出打印项次(输入);
}
}
但是当我在action类中使用此逻辑时,我似乎看不出它失败的原因。

字符串“Chartered Certified Accounters(ACCA)”不包含“-->”或“
System.out.println”(“!Chartered Certified Accounters(ACCA)”.indexOf(-->”);
打印
27

因此,您的输入字符串不能是您所期望的

string input=“特许注册会计师(ACCA)”;
 String input = "Chartered Certified<!--lol--> Accountants (ACCA)";
 int e = input.indexOf("-->");
 int s = input.indexOf("<!--");

 System.out.println(e+" "+s);
int e=input.indexOf(“-->”);
int s=input.indexOf(“可能您是从某种xml解析器获取字符串,并在呈现时隐藏注释字符串。请检查indexOf调用之前的输入字符串是否确实包含
'
字符串。

我使用命令行参数快速运行了测试。它工作正常。下面是代码/结果:

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);
}
publicstaticvoidmain(字符串[]args){
字符串输入=args[0];
系统输出打印项次(输入);
int e=input.indexOf(“-->”);
int s=input.indexOf(“会计师(ACCA))
特许注册会计师(ACCA)

如果您将
input
作为命令行参数传递,请确保它在引号中,否则
input
将由于空格而设置为
Chartered

此代码应该可以工作,但存在一些其他问题。为了安全起见,您应该对其进行编码,如下所示

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

您的代码似乎没有问题。因此,如果它失败了。可能是因为它解析的字符串不是您认为的字符串。字符串来自何处?请在解析之前尝试打印字符串,看看它实际是什么。

事实上,他发布的字符串确实有这些字符串,但它们被解释为HTML注释而没有显示。我添加了一个代码blo检查以显示它们。基本上,我正在尝试手动去除java中这两个注释之间包含的所有字符。甚至在命中jsp之前。因此,这是严格的java逻辑。indexOf()方法返回-1,因为java没有看到该字符串,但它是该字符串的一部分。@Binaryrespawn-请在您的问题中详细说明:java没有看到该字符串,但它是该字符串的一部分".Java似乎工作正常。看起来你也被智能警察盯上了。马特。@Jack-我想像StackOverflow这样的编码网站应该知道如何将小于或大于的符号转换为转义的等价符号,不必是个傻瓜。与你要找的字符串不匹配。注释被解析了吗在格式化你的文章?尝试检查你的输入字符串你能显示你设置输入值的代码吗?应该如何<代码> FoO-> bar Foo> > Bar,在BaluSc点上要更清楚:你需要考虑非法格式的注释,关于“<代码> >
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)
e = input.indexOf("-->");
s = input.indexOf("<!--");
if (e > -1 && s > -1 && e > s + 4) {
    input = input.replace(input.substring(s, e + "-->".length()), " ");
}