基于分隔符拆分字符串

Sel*_*Bor 6 java regex

我试图打破一个非常简单的字符串集合

0|0
10|15
30|55
Run Code Online (Sandbox Code Playgroud)

等等基本上由管道分开的数字.

当我使用java的字符串拆分函数与.split("|").我得到了一些不可预知的结果.在第一个插槽中的空白区域,有时数字本身并不是我认为应该的位置.

任何人都可以帮助并给我建议如何使用reg exp来保持整数?

我被要求提供代码尝试进行实际拆分.所以请允许我这样做,希望进一步澄清我的问题:)

String temp = "0|0";
String splitString = temp.split("|");
Run Code Online (Sandbox Code Playgroud)

结果

\n
0
| 
0
Run Code Online (Sandbox Code Playgroud)

我想要得到

0
0
Run Code Online (Sandbox Code Playgroud)

只要.永远感激任何提前帮助:)

far*_*jad 7

我仍然建议使用split(),它默认跳过空标记.你想摆脱字符串中的非数字字符,只保留管道和数字,然后你可以轻松地使用split()你想要的东西.或者您可以传递多个分隔符(以正则表达式的形式),这应该工作:

String[] splited = yourString.split("[\\|\\s]+");
Run Code Online (Sandbox Code Playgroud)

和正则表达式:

import java.util.regex.*;

Pattern pattern = Pattern.compile("\\d+(?=([\\|\\s\\r\\n]))");
Matcher matcher = pattern.matcher(yourString);
while (matcher.find()) {
    System.out.println(matcher.group());
}
Run Code Online (Sandbox Code Playgroud)


cra*_*cot 7

管道符号在正则表达式中是特殊的(它标记替代品),您需要将其转义.根据您使用的Java版本,这可以很好地解释您的不可预测的结果.

class t {
    public static void main(String[]_)
    {
        String temp = "0|0";
        String[] splitString = temp.split("\\|");

        for (int i=0; i<splitString.length; i++)
            System.out.println("splitString["+i+"] is " + splitString[i]);
    }       
}
Run Code Online (Sandbox Code Playgroud)

输出

splitString[0] is 0
splitString[1] is 0
Run Code Online (Sandbox Code Playgroud)

请注意,一个反斜杠是regexp转义字符,但由于反斜杠也是java源代码中的转义字符,因此需要其中两个将反斜杠推入正则表达式.