如何按字符串的最后一点拆分?

How can I split by the last point of a String?

我知道我可以像这样拆分字符串

String myString = "foo.bar";    
List<String> strings = Arrays.asList(myString.split("."));

但是我的字符串看起来像20151221.1051.Test.01.properties,它可以有任意数量的点,我想删除最后的.properties(只删除最后一个点)。

使用myString.lastIndexOf(".")获取最后一个点的索引。

例如,如果您确定输入的字符串至少包含一个点:

String name = myString.substring(0,myString.lastIndexOf("."));

如果你想使用split,你需要转义点(split需要一个正则表达式)。

List<String> strings = Arrays.asList(myString.split("\."));

如果你只需要删除最后一部分,你可以使用replaceAll和一个正则表达式:

myString = myString.replaceAll("\.[^.]*$", "");

解释:

  • \. 寻找一个点
  • [^.]* 查找 0 个或多个非点字符
  • $是字符串的结尾

您可以使用这样的子字符串方法解决该问题:

string test = "20151221.1051.Test.01.properties"
test = test.Substring(0, test.LastIndexOf('.'))

希望对您有所帮助!

您的代码就快完成了:) 稍作改动即可获得您需要的东西:)

您可以执行以下操作:

String myString = "201512211051.Test.01.properties";    
List<String> strings = Arrays.asList(myString.split("."));
strings.set(strings.size() - 1,"");

现在您已经替换了拆分数组的最后一部分 :) 加入列表以创建字符串。使用您喜欢的任何方式 :) 循环遍历元素或使用 ios 8 中提供的 String.join :)

尝试使用这个:

 String myString = "20151221.1051.Test.01.properties";    
    List<String> strings = Arrays.asList(myString.substring(0,myString.lastIndexOf(".")).split("\.(?=[^\.])"));
    for (String string : strings) {
        System.out.println(string);

    }

使用 myString.substring(0,myString.lastIndexOf(".")) 文件扩展名和拆分 split("\.(?=[^\.])") 你有输出:

  20151221
  1051
  Test
  01

看来您的问题更多是关于获取文件名减去扩展名。有足够多的开源库可以帮助您完成这项工作。例如:Apache Commons IO: https://commons.apache.org/proper/commons-io/apidocs/index.html?org/apache/commons/io/FileUtils.html

有一个名为 getBaseName() 的方法可以帮助您获取减去完整路径和减去扩展名的文件名。另一个名为 getExtension() 的方法只会为您提供文件的扩展名。随心所欲地切片和切块!