Java中没有空格的字符串比较

时间:2012-09-12 09:22:33

标签: java regex string stringbuilder string-comparison

民间,

我对Java中的字符串比较(中间有空格)有点怀疑。

UseCase: -
请考虑以下Solr查询字符串: -

  String query = ".....&ansDt:[* TO *]....";

ansDt的有效格式为: -

  1. ansDt : [* TO *]
  2. ansDt : [someDate TO *]
  3. ansDt : [* TO someDate]
  4. ansDt : [someDate TO otherDate]
  5. 我有两个疑问: -

    • 现在,我需要一种方法来检查查询字符串是否只有4th ansDt格式。如果遇到其他格式(简而言之,如果在*字段中遇到任何ansDt模式),我需要在控制台上抛出一些消息。

    • 此外,我需要检查第一,第二和第三种情况,而不考虑ansDt:之间的空格。 [& ansDt: [* TO *]。即ansDt :[* TO *]ansDt : [ * TO *]String.trim( )等都被视为相同

    我无法使用{{1}},因为它只删除字符串的前导和结尾空格

    如何使用Java String比较检查?

    由于

4 个答案:

答案 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)

这应该(对于字符串s1s2):

s1.replace(" ", "").equals(s2.replace(" "), ""))