在调用getClass()时,在必要时留出空格.getSimpleName()

时间:2017-02-14 21:08:53

标签: java inheritance

在调用getClass().getSimpleName().toLowerCase()方法时,是否有办法留出空间?

例如,我有几个不同的类,其名称为PublicTransportationCityBusMetroTramFerryAircraft

我已定义了toString()种方法,但希望在PublicTransportation之间留出空格。 CityBus类也是如此。以下是我的toString()方法:

//PublicTransportation class
public String toString()
{
    return "This " + getClass().getSimpleName().toLowerCase() + " costs " + getTicketPrice() + ". It has " + getNumOfStops() + " number of stops.";
}

//CityBus class
public String toString()
{
    return super.toString() + " It's route number is " + getRouteNum()
            + ".\nIt's operation start year is " + getBeginOpYear() + ". The line name is " + getLineName() + ". The driver is " 
            + getDriverName() + ".";
}

3 个答案:

答案 0 :(得分:4)

一种方法是使用正则表达式。例如,System.out.println("CityBus".replaceAll("([a-z])([A-Z])", "$1 $2"))将打印出City Bus(带空格)。所以在你的情况下,toString()将是这样的:

public String toString()
{
    String expandedName = getClass().getSimpleName().replaceAll("([a-z])([A-Z])", "$1 $2");
    return "This " + expandedName + " costs " + getTicketPrice() + ". It has " + getNumOfStops() + " number of stops.";
}

通过制作expandedName字符串static可以做得更好一些,因此我们不会在每次调用toString()时进行正则表达式替换,但每个类只需要一次

修改

replaceAll()需要两个regular expressions,并将一个替换为另一个。被替换的正则表达式是([a-z])([A-Z]),其转换为"小写字母,后跟大写字母"这两个字母都在括号中,这使得它们capture groups。然后我用$1 $2替换它,这意味着"捕获组1,空间,捕获组2"。

答案 1 :(得分:1)

我认为你不能以这种方式做到这一点,因为你只获得了类名,并将其改为小写。

如果可能,您可以尝试定义自己的getSimpleName方法(或方法)以您希望的格式返回类名。

答案 2 :(得分:0)

您可以使用正则表达式使用驼峰案例分割类名:

Date($(vDate),'YYYYMMDD')

然后使用StringBuffer从结果数组中构造最终字符串。