一个简单的问题,我不知道Java是否也有一个简单的解决方案。
我有一个字符串:name.ext.ext.out.end
我需要摆脱.out
,总是倒数第二个扩展。有没有indexof()
,但从头到尾?我知道如何以一种基本的方式做到这一点,但也许还有更好的方法。
答案 0 :(得分:3)
应该有lastIndexOf(..)
。
答案 1 :(得分:3)
如果您知道将始终为“.out”,为什么不在String类API中使用replace()
方法。
String extension = ".out";
String name = "name.ext.ext.out.end";
String newName = name.replace(extension, "");
编辑:不同的解决方案
String extension = ".out";
String name = "name.ext.ext.out.end";
//searches backward from the end of the string
name.lastIndexOf(extension, name.length());
答案 2 :(得分:2)
使用lastIndexOf()
您可以使用指定字符串replace()
替换为“”
答案 3 :(得分:0)
你的问题很简单:如何删除倒数第二个。这很简单,但你需要两次通过......这就是:
/**
* Returns the penultimate of a string.
*/
public static String getPenultimate( String str, char separator ){
int pos1 = str.lastIndexOf(separator);
if( pos1 > 0 ){
String substr = str.substring(0, pos1 );
int pos2 = substr.lastIndexOf(separator);
if( pos2 > 0 ){
return substr.substring(0, pos2) + str.substring(pos1);
}
return str.substring(pos1+1);
}
return null;
}
public static void main( String[] args){
System.out.println( getPenultimate( "name.ext.v2.out.end", '.' ) );
System.out.println( getPenultimate( "out.end", '.' ) );
System.out.println( getPenultimate( "end", '.' ) );
}
main()给出以下结果:
name.ext.v2.end
end
null
数据不足时返回null 。 separator 是作为参数传递的点(方法是通用的)。