如何通过字符串的最后一个点进行分割?

7
我知道我可以像这样分割字符串。
String myString = "foo.bar";    
List<String> strings = Arrays.asList(myString.split("."));

但是我的字符串看起来像 20151221.1051.Test.01.properties,它可能有任意数量的点,我想删除结尾处的 .properties(仅通过最后一个点)。


我想知道是否有正则表达式的解决方案。我知道可以按每个点进行拆分,并“重新构建”字符串而不包括最后一部分。 - Siro Duschletta
6个回答

11

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

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

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

2

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

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

如果您只需要删除最后一部分,您可以使用replaceAll和正则表达式:
myString = myString.replaceAll("\\.[^.]*$", "");

解释:

  • \\. 查找一个点
  • [^.]* 查找0个或多个非点字符
  • $ 表示字符串的末尾

0
你可以使用子字符串方法解决这个问题,像这样:
string test = "20151221.1051.Test.01.properties"
test = test.Substring(0, test.LastIndexOf('.'))

希望有所帮助!

0

你的代码已经接近完成了 :) 只需要做出一点小改变就能得到你需要的结果 :)

以下是你可以尝试的方法:

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

现在你已经替换了拆分数组的最后一部分 :) 连接列表以创建字符串。使用任何你喜欢的方式 :) 可以循环遍历元素,也可以使用 iOS 8 提供的 String.join。


0
尝试使用这个:
 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 split("\\.(?=[^\\.])") 可以得到输出结果:

  20151221
  1051
  Test
  01

0

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