我知道我可以像这样分割字符串
String myString = "foo.bar";
List<String> strings = Arrays.asList(myString.split("."));
但是我的字符串看起来像20151221.1051.Test.01.properties
,它可以有任意数量的点,我想在结尾删除.properties
(仅限最后一个点)。
答案 0 :(得分:6)
使用myString.lastIndexOf(".")
获取最后一个点的索引。
例如,如果您确定输入字符串至少包含一个点:
String name = myString.substring(0,myString.lastIndexOf("."));
答案 1 :(得分:2)
如果要使用split
,则需要转义点(拆分需要正则表达式)。
List<String> strings = Arrays.asList(myString.split("\\."));
如果您只需删除最后一部分,则可以使用replaceAll
和正则表达式:
myString = myString.replaceAll("\\.[^.]*$", "");
说明:
\\.
寻找一个点[^.]*
查找0个或更多非点字符$
是字符串的结尾答案 2 :(得分:0)
你可以使用这样的子串方法来解决这个问题:
string test = "20151221.1051.Test.01.properties"
test = test.Substring(0, test.LastIndexOf('.'))
希望有所帮助!
答案 3 :(得分:0)
你的代码几乎就在那里:)一个小小的改变可以获取你所需要的东西:)
以下是您可以做的事情:
String myString = "201512211051.Test.01.properties";
List<String> strings = Arrays.asList(myString.split("."));
strings.set(strings.size() - 1,"");
现在你已经替换了split数组的最后一部分:)加入列表来创建字符串。使用任何方式取悦你:)循环元素或使用ios 8中提供的String.join:)
答案 4 :(得分: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("\\.(?=[^\\.])")
输出:
20151221
1051
Test
01
答案 5 :(得分:0)
看起来你的问题更多的是关于获取文件名减去扩展名。有足够的开源库可以帮助您完成这项工作。例如:Apache Commons IO: https://commons.apache.org/proper/commons-io/apidocs/index.html?org/apache/commons/io/FileUtils.html
有一个名为getBaseName()的方法可以帮助您获取文件名减去完整路径并减去扩展名。另一个名为getExtension()的方法只能获取文件的扩展名。切片和骰子你想要的一切!