private int Index(String[] match,String keyword){
int m=0;
keyword=keyword+"1";
match[m]=match[m]+"1";
System.out.println("match:"+match[m]);
System.out.println("keyword:"+keyword);
System.out.println(match[m].equals(keyword));
while(!(match[m].equals("")) && !(match[m].equals(null))){
System.out.println("yes");
if(match[m].equals(keyword)){
break;
}
else
m++;
}
return m;
}
我得到以下输出(关键字的值是sparktg):
match:sparktg
1
keyword:sparktg1
false
为什么在匹配[m]的情况下,“sparktg”和&之间有一个新的行。 “1”?
答案 0 :(得分:2)
如果您无法控制输入,则可以在使用输入之前执行trim()
。这消除了任何\n
和空格。
if(match[m] != null) {
System.out.println("match:"+match[m].trim());
}
if(keyword != null) {
System.out.println("keyword:"+keyword.trim());
}
您可以通过编写实用程序方法来使其更清晰。
public String sanitize(String input) {
return input != null ? input.trim() : null;
}
并将其用作:
match[m] = sanitize(match[m]);
keyword = sanitize(keyword);
答案 1 :(得分:1)
我能看到的唯一原因是match[0]
已经在换行符中结束了。您应该在添加match[0]
之前输出"1"
进行检查。一个好的做法是以这种形式输出:
System.out.println("|"+match[0]+"|");
...因此使用|
清楚地标记字符串的开始和结束位置。
您可以使用trim()
切断任何空格,包括换行符:
match[m] = match[m].trim() + "1";
但是,这也会删除空格和制表符,这对您来说可能是也可能不是问题。当我比较字符串时,我经常首先修剪两个字符串,只是为了安全,但前提是你忽略了空格。
答案 2 :(得分:0)
试试这个。在解析之前替换所有新行。
private static int Index(String[] match,String keyword){
int m=0;
for(int k=0;k<match.length;k++){
if(match[k]!=null)
match[k]= match[k].replace("\n", "");
}
if(keyword!=null)
keyword= keyword.replace("\n", "");
keyword=keyword+"1";
match[m]=match[m]+"1";
System.out.println("match:"+match[m]);
System.out.println("keyword:"+keyword);
System.out.println(match[m].equals(keyword));
while(!(match[m].equals("")) && !(match[m].equals(null))){
System.out.println("yes");
if(match[m].equals(keyword)){
break;
}
else
m++;
}
return m;
}
答案 3 :(得分:0)
这不是答案,而是关于代码的注释
match[m].equals(null)
会抛出NullPointerException
。在调用对象的任何方法之前,检查match[m]
是否不等于null的正确方法是:mathc[m] != null
。所以使用这个:
match[m] != null && !match[m].equals("")
而不是:
!match[m].equals("") && !match[m].equals(null)