替换每个出现的角色,但最后

时间:2013-11-06 16:49:46

标签: java

假设我有一串a.b.c.d。如何编写将该字符串转换为abc.d的方法?或者有没有任何可用的方法实现?

到目前为止我尝试了什么

        int dotPlacing = propertyName.lastIndexOf(".");//12
        String modString = propertyName.replace(".", "");
        modString = modString.substring(0, dotPlacing-1) + "."+modString.substring(dotPlacing-1);

我正在使用它来编写Hibernate标准。它适用于user.country.name但不适用于user.country.name.ss。没有尝试任何其他字符串。

4 个答案:

答案 0 :(得分:6)

你可以将子串从0提取到lastIndefOf('.')。在此子字符串中,将所有.替换为空字符串。之后与子串合并(从lastIndexOf .到结束)

答案 1 :(得分:3)

  String start = "a.b.c.d.wea.s";
  String regex = "\\.(?=.*\\.)";
  String end = start.replaceAll(regex, "");
  System.out.println(end);

答案 2 :(得分:2)

您使用的dotPlacing不是原始字符串,而是使用没有任何点的新字符串,因此其长度发生了变化,这是您遇到问题的主要原因。

将您的代码更改为

int dotPlacing = propertyName.lastIndexOf('.');

String modString = propertyName.substring(0, dotPlacing).replace(".","")
        + propertyName.substring(dotPlacing);
System.out.println(modString);

答案 3 :(得分:1)

使用StringTokenizer

String in = "a.b.c.d";

StringTokenizer t = new StringTokenizer(in,".");
String last = "",result = "";
while(t.hasMoreTokens())
{
    last = t.nextToken();
    result += " "+last;
}
result = result.trim();
result.replaceAll(last,"."+last);