2013-06-11 58 views
-1

比方说,我有一个令人困惑的名字,如XX_10231_11_32-33-23_jsv.docJava解析文件名

如何从该文件名只提取11个?

我目前使用

filename.split("_", 3)[2]; 

它提取所有过去11

+0

正则表达式..'*?_ *?_(。*?)_ *' – vidit

+0

@vidit答案是'分裂()'。 – CPerkins

+0

使用split(String正则表达式)方法,没有限制。例如filename.split( “_”)[2]; – nikkatsa

回答

1

为什么不只是split("_")[2]代替split("_", 3)[2]

String filename="XX_10231_11_32-33-23_jsv.doc"; 
System.out.println(filename.split("_")[2]);//output 11 

无论如何,如果你想 “优化” split方法,停止分裂后11然后使用split("_", 4)。这将产生四个元素的数组将包含

["XX", "10231", "11", "32-33-23_jsv.doc"] 
1

这里的问题是3为限的选择。这意味着超过第二个分隔符的所有内容都将位于第3个标记中。使用负数限制,以便返回数组中的令牌数量不受限制。

filename.split("_", -1) 

按照split Javadoc中:

限参数控制在施加图案 数量,并且因此影响所得阵列的长度。如果 的限制值n大于零,那么该模式将在 之前应用最多n-1次,该阵列的长度将不会大于n,并且该阵列的最后一个条目将包含超出最后匹配的 定界符的所有输入。如果n是非正数那么该模式将尽可能多地应用为 ,并且该数组可以具有任何长度。如果n为零 那么该模式将尽可能多地应用,数组 可以具有任何长度,并且尾随的空字符串将被丢弃。

(重点煤矿)

+0

或者只是调用'split()'而不使用限制参数:'split(“_”)' – iamnotmaynard

+0

@iamnotmaynard是的,这样会更简单。但我也想指出'limit'参数的作用。 – rgettman

+1

这很好,因为它解释了OP的结果。 – iamnotmaynard