Java中的字符串和字符串操作

时间:2011-07-22 13:39:29

标签: java string

一个简单的问题,我不知道Java是否也有一个简单的解决方案。

我有一个字符串:name.ext.ext.out.end

我需要摆脱.out,总是倒数第二个扩展。有没有indexof(),但从头到尾?我知道如何以一种基本的方式做到这一点,但也许还有更好的方法。

4 个答案:

答案 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 是作为参数传递的点(方法是通用的)。