我想在分隔符上拆分一个String。 示例字符串:
String str="ABCD/12346567899887455422DEFG/15479897445698742322141PQRS/141455798951";
现在我希望字符串为ABCD/12346567899887455422
,DEFG/15479897445698742322141
就像我想要的那样
/
之前只有4个字符我的代码尝试:
public class StringReq {
public static void main(String[] args) {
String str = "BONL/1234567890123456789CORT/123456789012345678901234567890HOLD/123456789012345678901234567890INTC/123456789012345678901234567890OTHR/123456789012345678901234567890PHOB/123456789012345678901234567890PHON/123456789012345678901234567890REPA/123456789012345678901234567890SDVA/123456789012345678901234567890TELI/123456789012345678901234567890";
testSplitStrings(str);
}
public static void testSplitStrings(String path) {
System.out.println("splitting of sprint starts \n");
String[] codeDesc = path.split("/");
String[] codeVal = new String[codeDesc.length];
for (int i = 0; i < codeDesc.length; i++) {
codeVal[i] = codeDesc[i].substring(codeDesc[i].length() - 4,
codeDesc[i].length());
System.out.println("line" + i + "==> " + codeDesc[i] + "\n");
}
for (int i = 0; i < codeVal.length - 1; i++) {
System.out.println(codeVal[i]);
}
System.out.println("splitting of sprint ends");
}
}
答案 0 :(得分:10)
您声称在/
之后可能会出现数字和字母,但在您的示例中,我看不到/
之后应包含在结果中的任何字母。
因此,基于这个假设,您可以简单地将前面有数字的位置和后面的A-Z字符分开。
为此,您可以split
使用正在使用str.split("(?<=[0-9])(?=[A-Z])")
机制的正则表达式String str = "BONL/1234567890123456789CORT/123456789012345678901234567890HOLD/123456789012345678901234567890INTC/123456789012345678901234567890OTHR/123456789012345678901234567890PHOB/123456789012345678901234567890PHON/123456789012345678901234567890REPA/123456789012345678901234567890SDVA/123456789012345678901234567890TELI/123456789012345678901234567890";
for (String s : str.split("(?<=[0-9])(?=[A-Z])"))
System.out.println(s);
演示:
BONL/1234567890123456789
CORT/123456789012345678901234567890
HOLD/123456789012345678901234567890
INTC/123456789012345678901234567890
OTHR/123456789012345678901234567890
PHOB/123456789012345678901234567890
PHON/123456789012345678901234567890
REPA/123456789012345678901234567890
SDVA/123456789012345678901234567890
TELI/123456789012345678901234567890
输出:
/
如果您的字母实际上可以出现在第二部分(/
之后),那么您可以使用拆分,它会尝试查找具有四个字母字符且split("(?=[A-Z]{4}/)")
之后的地方(?!^)
(假设您至少使用Java 8,如果不是,则需要在字符串的开头手动排除拆分的情况,例如在正则表达式的开头添加(?<=.)
或$(SELECTOR).is(':visible')
。) / p>
答案 1 :(得分:3)
你可以使用正则表达式
Pattern pattern = Pattern.compile("[A-Z]{4}/[0-9]*");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group());
}
答案 2 :(得分:2)
而不是:
String[] codeDesc = path.split("/");
只需使用此正则表达式(之前的4个字符和之后的任何字符):
String[] codeDesc = path.split("(?=.{4}/)(?<=.)");
答案 3 :(得分:1)
使用\d
更简单:
path.split("(?=[A-Za-z])(?<=\\d)");
修改强>
仅包含4个任何大小的字母的条件。
path.split("(?=[A-Za-z]{4})(?<=\\d)");
<强>输出:强>
BONL/1234567890123456789
CORT/123456789012345678901234567890
HOLD/123456789012345678901234567890
INTC/123456789012345678901234567890
OTHR/123456789012345678901234567890
PHOB/123456789012345678901234567890
PHON/123456789012345678901234567890
REPA/123456789012345678901234567890
SDVA/123456789012345678901234567890
TELI/123456789012345678901234567890
目前尚不清楚这是否是作者预期的结果。