2015-12-11 127 views
2

我得到一个字符串,我必须检查它是否以SUCCESS结尾。我得到的字符串是多行的,即它有\n。如果以SUCCESS.结尾,则必须返回true,如果以FAILED.结尾,则必须返回false。然而确保字符串中有 n以特定字符串结尾

pValidationReport.endsWith("SUCCESS.") 

评估为false即使pValidationReportFAILED.结束如可以看到下面:

enter image description here

的方法如下:

private boolean isValidationSuccess(String pValidationReport) 
{ 
    if(pValidationReport.endsWith("SUCCESS.")) 
     return true; 
    else if(pValidationReport.endsWith("FAILED.")) 
     return false; 
} 

什么我失踪?

+6

如果问题是,它有一个新的行(或其他空格),使用['trim()'](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim%28%29)。例如。 'if(str.trim()。endsWith(“SUCCESS。”))' – khelwood

+3

另一个问题是你的程序可能没有正确编译,因为你没有告诉它什么时候返回,当它以'SUCCESS'也不'失败'。它被标记为红色的X.你应该确保所有**可能的字符串都有返回值,即使你知道它们都将以两种方式之一结束。 – RealSkeptic

+1

@ khelwood yep maan它在'SUCCESS.'后有'\ n':'← – Mahesha999

回答

2

第一修剪那么字符串chcek为的endsWith()

pValidationReport.trim().endsWith("SUCCESS.") 

Java的字符串修剪方法是,在使用从字符串的开头和结尾除去多余的空格一个实例方法。 String Trim方法用于字符串对象或文字。在Java中,字符串是不可变的,所以一旦它们被创建,内容就不能被修改。由于这个原因,结果将是一个新创建的字符串对象,在字符串的两端都没有空格。 很明显,修剪完字符串后,它会返回一个新的字符串对象。如果在两侧没有修剪空间,则将返回String类型的同一对象而不是新的对象。

如果参数表示的字符序列是由此对象表示的字符序列的后缀,则endsWith()方法返回true,否则返回false。

+0

你确实覆盖了我的编辑:^) –

1

如果您输入的字符串在您要查找的子字符串后面有空白字符,它将不匹配。你可能使用正则表达式为宗旨:

private boolean isValidationSuccess(String pValidationReport) 
{ 
    Pattern successPattern = Pattern.compile(".*SUCCESS\\.\\s*$"); 
    return successPattern.matcher(pValidationReport).matches(); 
} 

的\ S *确保成功。即使后面有任意数量的空格,制表符,换行符,回车符,换页符和垂直制表符,末尾的字符串也会被识别。 它也能够将模式移动到最后的实例变量,然后只用匹配器在你的方法,节省了调用编译():

private final Pattern successPattern = Pattern.compile(".*SUCCESS\\.\\s*$"); 

private boolean isValidationSuccess(String pValidationReport) 
{ 
     return this.successPattern.matcher(pValidationReport).matches(); 
} 
相关问题