Java正则表达式跳过分割时的字符序列

时间:2014-03-04 10:00:09

标签: java regex

我有一个包含多个id及其名称的字符串:


1019-水稻分布/ 1022-小麦(补充)/ 1030-水稻BPLCVC(SLETY)/ 1031-水稻BPLCVC Adhoc(适用于K-35)


我想拆分它并将其存储在另一个字符串数组中 当我使用

 myString.split("[/or-]");

它给了我几乎所需的结果。但是在程序名称中包含“ - ”的最后组合中存在一个问题,程序也将此分割为我不想要的 如何避免这种情况。请建议一个适用于程序名称的通用解决方案,如J-300,不仅适用于K-35 期望的输出

  • 1019大米分发
  • 1031小麦(补充)
  • 1030 Rice BPLCVC(SLETY)
  • 1031 Rice BPLCVC Adhoc(适用于K-35)

5 个答案:

答案 0 :(得分:1)

我会首先在/分割以获取一系列ID /名称对,然后在第一个substring通过indexOf-分割每个字符串以获取ID和名称分开。

答案 1 :(得分:1)

不知道这对你是否合适:

String s = "yourString";
String[] v = s.split("/|(?<=(/|^)\\d{1,999})-");
System.out.println(Arrays.toString(v));

输出:

[1019, Rice Distribution, 1022,  Wheat (Supplement), 1030, Rice BPLCVC (SLETY), 1031, Rice BPLCVC Adhoc (For K-35)]

所以你看到最后一个元素,k-35就在那里。

答案 2 :(得分:1)

String bubba = "1019-Rice Distribution/1022- Wheat (Supplement)/1030-Rice BPLCVC (SLETY)/1031-Rice BPLCVC Adhoc (For K-35)";

for(String c: bubba.split("/"){
 System.out.println(c.replaceFirst("-"," ");
}

答案 3 :(得分:1)

我会更复杂,并使用Pattern来提取每个key -> value对:

public static void main(String[] args) throws Exception {
    final String in = "1019-Rice Distribution/1022- Wheat (Supplement)/1030-Rice BPLCVC (SLETY)/1031-Rice BPLCVC Adhoc (For K-35)";
    final Pattern patt = Pattern.compile("(\\d++)\\s*+-\\s*+([^/]++)(/|$)");
    final Matcher matcher = patt.matcher(in);
    while (matcher.find()) {
        System.out.println(matcher.group(1) + " -> " + matcher.group(2));
    }
}

输出:

1019 -> Rice Distribution
1022 -> Wheat (Supplement)
1030 -> Rice BPLCVC (SLETY)
1031 -> Rice BPLCVC Adhoc (For K-35)

答案 4 :(得分:1)

您希望在/上拆分,并在前4位数后用空格替换-。如果这是真的那么你可以尝试这样的事情:

String data = "1019-Rice Distribution/1022- Wheat (Supplement)/1030-Rice BPLCVC (SLETY)/1031-Rice BPLCVC Adhoc (For K-35)";
for (String s : data.split("/"))
    System.out.println(s.replaceAll("(?<=^\\d{4})-\\s*", " "));

输出:

1019 Rice Distribution
1022 Wheat (Supplement)
1030 Rice BPLCVC (SLETY)
1031 Rice BPLCVC Adhoc (For K-35)

说明:

replaceAll("(?<=^\\d{4})-\\s*", " ")

  • (?<=...)是机制背后的看法。它测试是否在正确的地方正则表达式游标之前是否存在匹配后面描述的正则表达式的子字符串,在情况^\\d{4}中,四个数字位于字符串的开头。关于它的最重要的部分是,后面匹配的子串不会包含在实际匹配中(组0中的那个)。
  • -\\s*是我们想要用空格替换的部分,这是一个-,可选地还有一些空格,例如1022- Wheat (Supplement)