如何在Java中拆分字符串,删除最后一个元素并重新连接?

9
我有一个数组变量filesFound,它保存了一个文件名。如何删除最后的数字部分和其扩展名呢?
...
File[] filesFound = SomeUtils.findFile("xyz","c:\\") 

//fileFound[0] is now "abc_xyz_pqr_27062016.csv"
//What I need is "abc_xyz_pqr" only

String[] t = filesFound[0].toString().split("_")
Arrays.copyOf(t, t.length - 1) //this is not working
...

什么意思不工作? - Jens
6个回答

10

如何使用 .substring().lastIndexOf()

String file = filesFound[0];
String newFileName = file.substring(0, file.lastIndexOf("_"));
< p >新的文件名< code >newFileName< /code >将包含最后一个下划线字符之前(不包括下划线)的所有内容。< /p >

"-1" 是错误的。应该是 substring(0,file.lastIndexof('_' )); - FredK
@FredK - 你说得对,substring()函数的第二个参数是结束位置但不包括该位置的字符,所以-1是不必要的。但是我仍然喜欢这种简洁的写法,相比目前提供的其他答案,去掉-1会使代码更加简洁。所以我已经将其删除了。顺便说一句,你发现得真好! - Hatley

6

Arrays.copyOf方法返回一个新的数组,因此你需要将其赋值给t或一个新变量:

t = Arrays.copyOf(t, t.length - 1)

6
复制数组不会将其各部分拼接在一起。请尝试使用


StringBuilder builder = new StringBuilder();
for (int i = 0; i < t.length - 1; i++) {
    builder.append(t[i]);
}
String joined = builder.toString();

2

正则表达式:

System.out.println("abc_xyz_pqr_27062016.csv");       

System.out.println("abc_xyz_pqr_27062016.csv".replaceAll("_\\d+.+",""));

打印输出:
abc_xyz_pqr_27062016.csv
abc_xyz_pqr

1
如果您使用的是JAVA 8或更高版本,您可以使用.limitCollector.joining()
    String someString = "abc_xyz_pqr_27062016.csv";
    String[] splitArray = searchTerm.split("_");
    
    //Limiting the array length, not to consider last element while joining
    String stringAfterJoining = Arrays.stream(splitArray)
            .limit(splitArray.length - 1)
            .collect(Collectors.joining("_"));

0
以有点紧张的方式...
            //fileFound[0] is now "abc_xyz_pqr_27062016.csv"

            String file = fileFound[0] ;
            String filter = "";
            int i = 0;
            char [] allChars = file.toCharArray();
            char oneChar ;
            while(i < (file.length()-4)){//4 is .csv
                oneChar = allChars[i];
                if((oneChar >= 65 && oneChar <=90)||(oneChar >= 97 && oneChar <=122)|| oneChar==95){
                    filter += oneChar;
                }
                i++;

            }
            filter = filter.substring(0, filter.length()-1);
            System.out.println(filter);

这个非常好用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接