0

您好,我有以下字符串,我试图将其拆分为休眠 createAlias 和查询限制。

我需要将字符串分成三部分。

employeeProfile.userProfile.shortname

1. employeeProfile.userProfile
2. userProfile
3. userProfile.shortName

我也希望它是动态的来做一个不同长度的字符串。

employeeProfile.userProfile.anotherClass.shortname

1. employeeProfile.userProfile.anotherClass
2. userProfile.anotherClass
3. anotherClass.shortName

使用以下代码,除了第三个之外,我能够使其大部分工作。

public void hasAlias(Criteria t, final Map<String, Object> map) {
    for (Map.Entry<String, Object> entry : map.entrySet()) {
        String key = entry.getKey();
        if (key != null && key.contains(".")) {
            key = key.substring(0, key.lastIndexOf("."));
            String value = key.contains(".") ? key.substring(key.lastIndexOf(".") + 1, key.length()) : key;
            t.createAlias(key, value);
        }
    }
}

有人可以帮我拿到 3 号吗?

4

4 回答 4

1

employeeProfile.userProfile.shortname

  1. 员工档案.userProfile
  2. 用户资料
  3. userProfile.shortName

假设我们有这个:

int index1 = str.indexOf(".");
int index2 = str.lastIndexOf(".");

然后这个工作(模块+ 1在这里和那里):

  1. substring(0, index2);
  2. substring(index1, index2);
  3. substring(index1);
于 2013-10-30T19:47:48.627 回答
1

看看String.split()。例如,您可以执行以下操作:

String[] tmp="foo.bar".split("."); 

一旦你以这种形式拥有它,你就可以用它做任何你需要的事情。

于 2013-10-30T19:47:53.207 回答
1

要获得数字 3,您可以使用正则表达式。采用最后两项的正则表达式将是:

[a-zA-z]+\.[a-zA-z]+$

使用以下代码获取数字 3:

Pattern pattern = Pattern.compile("[a-zA-z]+\\.[a-zA-z]+$");
Matcher matcher = p.matcher("employeeProfile.userProfile.anotherClass.shortname");

if (m.find()) {
    System.out.println(m.group(1));
}

这将打印:

anotherClass.shortname
于 2013-10-30T19:49:02.573 回答
1

我认为您可能对 Java 的 StringTokenizer 有更好的运气:http: //docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html

你可以这样设置:

String myString = "employeeProfile.userProfile.shortname";
String myDelimiter = ".";
StringTokenizer tokens = new StringTokenizer(myString,myDelimiter);

由此,您应该能够获得所需的东西并使用代币。

于 2013-10-30T19:50:24.550 回答