首页 > 解决方案 > Java:在方法中使用更少的代码拆分字符串

问题描述

我现在有一些像这种模式的输入:

org.apache.commons.fileupload,version=1.2.1,org.apache.commons.fileuplo>ad.disk,version=3.0.0,org.apache.commons.fileupload.servlet,version=1.2>.1,org .apache.commons.fileupload.util,version=1.2.1,org.apache.commons.>io,version=1.4.0,org.apache.commons.io.filefilter,version=1.4.0,org.apa> che.commons.io.output,version=1.4.0,org.apache.felix.inventory,version=>1.0.0,org.apache.felix.webconsole,version=3.3.0,org.apache.felix.webcon >sole.bundleinfo,version=1.0.0,org.apache.felix.webconsole.i18n,version=>1.0.0] 属性[0]: org.apache.commons.fileupload

我需要将其拆分并将其存储在表格或列表中,如下所示:

其中:(示例)

 String[] attributes = inputs.split();
 attributes[0]: org.apache.commons.fileupload,version=1.2.0
 attributes[1]: org.apache.commons.fileupload.disk,version=3.0.0

  .....

我尝试了一些代码:

attributes = input.split("((,version=)*([0-9],))");
but i got: 
attributes[0]: org.apache.commons.fileupload,version=1.2.
attributes[1]: org.apache.commons.fileupload.disk,version=3.0.

version=1.2.X 的最后一位数字总是丢失!

我希望有人可以帮助我

标签: javasplit

解决方案


我认为对于这个特定的堆栈跟踪,最好的拆分模式是:

,(?=(?:org|com)\\.)

也就是说,在堆栈跟踪的每一行中的最后一个逗号处拆分。

String[] parts = text.split(",(?=(?:org|com)\\.)");
for (String part : parts) {
    System.out.println(part);
}

输出:

org.apache.commons.fileupload,version=1.2.1
org.apache.commons.fileupload.disk,version=3.0.0
org.apache.commons.fileupload.servlet,version=1.2.1
org.apache.commons.fileupload.util,version=1.2.1
org.apache.commons.io,version=1.4.0
org.apache.commons.io.filefilter,version=1.4.0
org.apache.commons.io.output,version=1.4.0
org.apache.felix.inventory,version=>1.0.0
org.apache.felix.webconsole,version=3.3.0
org.apache.felix.webconsole.bundleinfo,version=1.0.0
org.apache.felix.webconsole.i18n,version=>1.0.0] attributes[0]:org.apache.commons.fileupload

关于堆栈跟踪提到其他包时会发生什么,我们可以在替代项中添加另一个前缀。


推荐阅读