Java 在数据存储Google App engine的endpint类中使用正则表达式或模式匹配

Java 在数据存储Google App engine的endpint类中使用正则表达式或模式匹配,java,android,regex,google-app-engine,google-cloud-datastore,Java,Android,Regex,Google App Engine,Google Cloud Datastore,在我的app engine Java应用程序中,我想在数据存储查询中使用RegEx,以检查我的DB字段之一中的前缀。我有一列存储“用户名”。现在我想实现“搜索用户”功能。为此,我将不得不使用正则表达式,它将通过一些特定的前缀值搜索用户。我引用了这个链接。我想做的正是这个链接中描述的。他们在python中使用了Gqlquery,但我想在JAVA应用程序引擎应用程序中实现这一点。此外,我正在我的android客户端中使用这个应用程序引擎应用程序。请任何人都能帮我在数据存储上实现正则表达式。谢谢。关于

在我的app engine Java应用程序中,我想在数据存储查询中使用
RegEx
,以检查我的DB字段之一中的前缀。我有一列存储“用户名”。现在我想实现“搜索用户”功能。为此,我将不得不使用正则表达式,它将通过一些特定的前缀值搜索用户。我引用了这个链接。我想做的正是这个链接中描述的。他们在python中使用了
Gqlquery
,但我想在JAVA应用程序引擎应用程序中实现这一点。此外,我正在我的android客户端中使用这个应用程序引擎应用程序。请任何人都能帮我在数据存储上实现正则表达式。谢谢。

关于“类似GQL”查询的Python解决方案,使用低级数据存储API的Java实现应该如下所示:

// From user input
String usernamePrefix = "XX";

Filter usernameGreaterThanPrefixFilter =
  new FilterPredicate("username",
                      FilterOperator.GREATER_THAN_OR_EQUAL,
                      usernamePrefix);

Filter usernameLessThanLargestPossibleFilter =
  new FilterPredicate("username",
                      FilterOperator.LESS_THAN,
                      usernamePrefix + "\ufffd");

Filter usernameKindaLikeFilter =
  CompositeFilterOperator.and(usernameGreaterThanPrefixFilter, usernameLessThanLargestPossibleFilter);

Query q = new Query("User").setFilter(usernameKindaLikeFilter);
我从来没有测试过这个,如果它有效的话,多亏了你,我会学到一些东西


如果它不起作用,您可以始终在每个实体上存储一个固定长度的“userPrefix”属性,该属性将是用户名的子字符串。然后,您可以使用
FilterOperator.EQUAL
equality筛选器查询userPrefix属性。

您是否尝试过使用Java低级数据存储API实现“类似GQL”的查询(来自python问题)?使用数据存储,您还可以通过将用户名的前N个字符存储在单独的属性中,并使用相等筛选器对其进行查询来“欺骗”。肯定很糟糕,但总比什么都没有好……谢谢你的提示,我不确定它是否会起作用:)