Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中从字符串中提取子字符串_Java_Substring - Fatal编程技术网

在Java中从字符串中提取子字符串

在Java中从字符串中提取子字符串,java,substring,Java,Substring,我有很多文件,它们都叫做name\u version\u xyz.ext 在我的Java代码中,我需要提取文件名的名称和版本部分。我可以使用lastIndexOf查找下划线来实现这一点,但我认为这不是最好的解决方案。这可以用regexp实现吗 请注意,“name”部分可以包含任意数量的下划线。您可以使用Regex,但我认为在这种情况下有点过分了。所以我个人会坚持你目前的解决方案 它正在工作,不太复杂,这就是为什么我不认为有任何理由切换到另一种方法。是的,作为Java字符串的regexp看起来就像

我有很多文件,它们都叫做
name\u version\u xyz.ext

在我的Java代码中,我需要提取文件名的名称和版本部分。我可以使用
lastIndexOf
查找下划线来实现这一点,但我认为这不是最好的解决方案。这可以用regexp实现吗


请注意,“name”部分可以包含任意数量的下划线。

您可以使用Regex,但我认为在这种情况下有点过分了。所以我个人会坚持你目前的解决方案


它正在工作,不太复杂,这就是为什么我不认为有任何理由切换到另一种方法。

是的,作为Java字符串的regexp看起来就像(未测试)


“name”是组(1),“version”是组(2),xyz是组(3),ext是组(4)。

如果保证将文件的最后一部分命名为_xyz.ext,那么这确实是最干净的方法。(如果你不能保证这一点,那么你当然需要想出其他办法。)

正如正则表达式所说:

如果您用正则表达式解决了一个问题,那么您现在有两个问题


使用字符串标记器:

或者,String.split()


如果您不想使用正则表达式,我认为最简单的解决方案是检索文件,只获取不带扩展名的部分,然后:

String file = "blah_blah_version_123";
String[] tmp = file.split("_version_");
System.out.println("name = " + tmp[0]);
System.out.println("version = " + tmp[1]);
输出:

name = blah_blah
version = 123
name = blah_blah
version = 123