在调用getClass().getSimpleName().toLowerCase()
方法时,是否有办法留出空间?
例如,我有几个不同的类,其名称为PublicTransportation
,CityBus
,Metro
,Tram
,Ferry
,Aircraft
。
我已定义了toString()
种方法,但希望在Public
和Transportation
之间留出空格。 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() + ".";
}
答案 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从结果数组中构造最终字符串。