比方说,我有一个令人困惑的名字,如XX_10231_11_32-33-23_jsv.doc
Java解析文件名
如何从该文件名只提取11个?
我目前使用
filename.split("_", 3)[2];
它提取所有过去11
比方说,我有一个令人困惑的名字,如XX_10231_11_32-33-23_jsv.doc
Java解析文件名
如何从该文件名只提取11个?
我目前使用
filename.split("_", 3)[2];
它提取所有过去11
为什么不只是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"]
这里的问题是3
为限的选择。这意味着超过第二个分隔符的所有内容都将位于第3个标记中。使用负数限制,以便返回数组中的令牌数量不受限制。
filename.split("_", -1)
按照split
Javadoc中:
限参数控制在施加图案 数量,并且因此影响所得阵列的长度。如果 的限制值n大于零,那么该模式将在 之前应用最多n-1次,该阵列的长度将不会大于n,并且该阵列的最后一个条目将包含超出最后匹配的 定界符的所有输入。如果n是非正数那么该模式将尽可能多地应用为 ,并且该数组可以具有任何长度。如果n为零 那么该模式将尽可能多地应用,数组 可以具有任何长度,并且尾随的空字符串将被丢弃。
(重点煤矿)
或者只是调用'split()'而不使用限制参数:'split(“_”)' – iamnotmaynard
@iamnotmaynard是的,这样会更简单。但我也想指出'limit'参数的作用。 – rgettman
这很好,因为它解释了OP的结果。 – iamnotmaynard
正则表达式..'*?_ *?_(。*?)_ *' – vidit
@vidit答案是'分裂()'。 – CPerkins
使用split(String正则表达式)方法,没有限制。例如filename.split( “_”)[2]; – nikkatsa