2

伙计们,

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

用例:-
考虑以下 Solr 查询字符串:-

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

ansDt 的有效格式为:-

  1. ansDt : [* TO *]
  2. ansDt : [someDate TO *]
  3. ansDt : [* TO someDate]
  4. ansDt : [someDate TO otherDate]

我有两个疑问:-

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

  • ansDt此外,无论& :&之间的空格如何,我都需要检查第一种、第二种和第三种情况[。即ansDt: [* TO *], ansDt :[* TO *],ansDt : [ * TO *]等都被认为是相同的

我不能使用String.trim( ),因为它只会删除字符串的前导和结尾空格

如何使用 Java 字符串比较检查?

谢谢

4

4 回答 4

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 "]"
于 2012-09-12T10:47:48.957 回答
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);

检查yourStringindexOf("*")如果不是-1您的格式是 1,2 或 3。但是有很多错误情况,您必须检查 NPE。

于 2012-09-12T09:46:44.113 回答
0

您需要比简单的正则表达式更复杂的东西。您已经编写了相当于四行语法的内容。您应该采用解析器生成器的方法:对其进行标记,然后执行规则以查看标记是否与您的语法匹配。

如果你能忍受解析器生成器的大锤,我会推荐 ANTLR。

于 2012-09-12T09:25:15.993 回答
0

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

s1.replace(" ", "").equals(s2.replace(" "), ""))
于 2012-09-12T09:25:28.297 回答