民间,
我对Java中的字符串比较(中间有空格)有点怀疑。
UseCase: -
请考虑以下Solr查询字符串: -
String query = ".....&ansDt:[* TO *]....";
ansDt的有效格式为: -
ansDt : [* TO *]
ansDt : [someDate TO *]
ansDt : [* TO someDate]
ansDt : [someDate TO otherDate]
我有两个疑问: -
现在,我需要一种方法来检查查询字符串是否只有4th ansDt
格式。如果遇到其他格式(简而言之,如果在*
字段中遇到任何ansDt
模式),我需要在控制台上抛出一些消息。
此外,我需要检查第一,第二和第三种情况,而不考虑ansDt
和:
之间的空格。 [
& ansDt: [* TO *]
。即ansDt :[* TO *]
,ansDt : [ * TO *]
,String.trim( )
等都被视为相同
我无法使用{{1}},因为它只删除字符串的前导和结尾空格
如何使用Java String比较检查?
由于
答案 0 :(得分:3)
请试试这个正则表达式:
String query = ".....&ansDt:[* TO *]....";
String pattern = ".*ansDt[\\ ]*[:][\\ ]*[\\[].*[\\ ]+TO[\\ ]+.*[\\]].*";
boolean test = query.matches(pattern);
其他信息:
. matches any character
.* matches any amount of characters
[\ ] matches space
[\ ]+ matches one or more spaces, used between "TO"
[\ ]* matches any amount of spaces, used between ":"
[\[] and [\]] matches "[" and "]"
答案 1 :(得分:1)
正则表达式是要走的路。但是为了快速修复,你可以尝试
String query = ".....&ansDt : [ * TO *]....";
int indexOfansDt = query.indexOf("ansDt");
int indexOfBeginBracket = query.indexOf("[",indexOfansDt);
int indexOfEndBracket = query.indexOf("]",indexOfBeginBracket);
String yourString = query.substring(indexOfBeginBracket, indexOfEndBracket+1);
System.out.println(yourString);
检查yourString
indexOf("*")
,如果不是-1
您的格式是1,2或3.但是有很多错误情况,您必须检查NPE
答案 2 :(得分:0)
你需要比简单的正则表达更复杂的东西。你已经写了四行语法。您应该采用解析器生成器的方法:对其进行标记,然后执行规则以查看标记是否与您的语法匹配。
如果你能站在解析器生成器的大锤子上,我建议使用ANTLR。
答案 3 :(得分:0)
这应该(对于字符串s1
和s2
):
s1.replace(" ", "").equals(s2.replace(" "), ""))