基于分隔符拆分字符串

时间:2011-12-17 21:09:40

标签: java regex

我试图分解一个非常简单的字符串集合,这些字符串以

的形式出现
0|0
10|15
30|55

等等。基本上由管道分隔的数字。

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

有人可以帮忙并就如何使用reg exp来保持整数来提供建议吗?

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

String temp = "0|0";
String splitString = temp.split("|");

结果

\n
0
| 
0

我想要

0
0

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

8 个答案:

答案 0 :(得分:7)

我仍然建议使用split(),默认情况下会跳过空令牌。你想摆脱字符串中的非数字字符,只保留管道和数字,然后你可以轻松地使用split()来获得你想要的东西。或者您可以传递多个分隔符进行拆分(以正则表达式的形式),这应该有效:

String[] splited = yourString.split("[\\|\\s]+");

和正则表达式:

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());
}

答案 1 :(得分: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]);
    }       
}

输出

splitString[0] is 0
splitString[1] is 0

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

答案 2 :(得分:4)

您可以替换管道的空白区域并将其拆分。

String test = "0|0 10|15 30|55";
test = test.replace(" ", "|");
String[] result = test.split("|");

希望这对你有帮助..

答案 3 :(得分:3)

您可以使用StringTokenizer。

String test = "0|0";
StringTokenizer st = new StringTokenizer(test);
int firstNumber = Integer.parseInt(st.nextToken()); //will parse out the first number
int secondNumber = Integer.parseInt(st.nextToken()); //will parse out the second number

当然,如果你有多个字符串,你总是可以将它嵌套在while循环中。

此外,您需要导入java.util。*才能使其正常工作。

答案 4 :(得分:2)

管道('|')是regular expressions中的特殊字符。如果你想将它作为常规字符使用,它需要用'\'字符“转义”,不幸的是'\'是Java中的一个特殊字符所以你需要做一种双重逃避操作,例如。

String temp = "0|0";
String[] splitStrings = temp.split("\\|");

答案 5 :(得分:2)

Guava库有一个很好的类Splitter,它比String.split()更方便。优点是您可以选择将字符串拆分为特定字符(如“|”),特定字符串或正则表达式,您可以选择如何处理结果部分(修剪它们,抛出空的部分等) )。

例如,您可以致电

Iterable<String> parts = Spliter.on('|').trimResults().omitEmptyStrings().split("0|0")

答案 6 :(得分:0)

这应该适合你:

([0-9]+)

答案 7 :(得分:0)

考虑一种情况,我们以字符串的形式从csv或xls文件中读取一行,并且需要根据分隔符分隔字符串数组中的列。

以下是实现此问题的代码段。

         
    { ...
    ....
    String line = new BufferedReader(new FileReader("your file"));
    String[] splittedString = StringSplitToArray(stringLine,"\"");
    ...
    ....
    }
    public static String[] StringSplitToArray(String stringToSplit, String delimiter) 
    {  
        StringBuffer token = new StringBuffer();
        Vector tokens = new Vector();
        char[] chars = stringToSplit.toCharArray();
        for (int i=0; i  0) {
               tokens.addElement(token.toString());
               token.setLength(0);
               i++;
         }
         } else {
                 token.append(chars[i]);
             }
         }
         if (token.length() > 0) {
             tokens.addElement(token.toString());
         }
         // convert the vector into an array
         String[] preparedArray = new String[tokens.size()];
         for (int i=0; i < preparedArray.length; i++) {
             preparedArray[i] = (String)tokens.elementAt(i);
         }
         return preparedArray;
    }

 

上面的代码片段包含对StringSplitToArray的方法调用,其中方法将stringline转换为字符串数组,根据指定的分隔符或传递给方法来分割行。分隔符可以是逗号分隔符(,)或双重代码(&#34;)。

有关详情,请按照linkhttp://scrapillars.blogspot.in

进行操作
相关问题