这一定很简单,但我遇到了很大的困难。你看我试图在另一个字符串中找到一个字符串,如下所示。
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);
}
}
但是当我在我的动作类中使用这个逻辑时,我似乎无法理解为什么它会失败。
答案 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;! - ”,因此e
和s
将始终为-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)
您的代码似乎没问题。所以,如果它失败了。可能是它解析的字符串不是你想象的那样。字符串来自哪里?尝试在解析之前打印字符串以查看它实际上是什么。