2

假设我有一串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

4 回答 4

7

您可以将子字符串从 0 提取到lastIndexOf('.'). 在此子字符串中,全部替换.为空字符串。之后与子字符串合并(从头到尾lastIndexOf .)。

就像是:

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

String separator = ".";
String replacement = "";
String newString = theString.substring(0, theString.lastIndexOf(separator)).replaceAll(separator , replacement).concat(theString.substring(theString.lastIndexOf(separator)));

Assert.assertEquals("abc.d", newString);
于 2013-11-06T16:52:47.513 回答
6
  String start = "a.b.c.d.wea.s";
  String regex = "\\.(?=.*\\.)";
  String end = start.replaceAll(regex, "");
  System.out.println(end);
于 2013-11-06T17:21:41.933 回答
2

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

将您的代码更改为

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

String modString = propertyName.substring(0, dotPlacing).replace(".","")
        + propertyName.substring(dotPlacing);
System.out.println(modString);
于 2013-11-06T17:03:19.847 回答
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);
于 2013-11-06T16:55:07.807 回答