Java使用和分割字符串使用正则表达式

时间:2013-10-16 20:48:38

标签: java regex string split

这似乎是一个基本的东西,但我似乎无法理解正则表达式我以前从未真正使用它们,现在我遇到了他们将有用的时间。

我查看过去一小时的例子和过去的问题,但仍然不理解。我的问题是我有一个字符串

"(2 h 9 min from now) | +18.7 feet"

我想分成两个字符串

String a = "2 h 9 min from now";

String b = "18.7 feet";

如何使用正则表达式拆分字符串并在其他字符串中使用“正则表达式”?

到目前为止,我已提出:

stringx.split("(%s) | +%s \n");

stringx.split("(\\w) | +\d.\d feet");

但我不知道如何将%s(如果那是正确的话)变成正则表达式之外的字符串

4 个答案:

答案 0 :(得分:2)

由于您要删除一些字符(()+),最安全的方法是与PatternMatcher类匹配的标准正则表达式:

public static void main (String[] args) {
    String input= "(2 h 9 min from now) | +18.7 feet";
    System.out.println("Input: "+ input);
    Pattern p = Pattern.compile("\\(([^)]+)\\) \\| \\+(\\d+\\.\\d feet)");
    Matcher m = p.matcher(input);
    String a = null, b = null;
    if (m.find()) {
        a = m.group(1);
        b = m.group(2);
    }
    System.out.println("a: "+ a);
    System.out.println("b: "+ b);
}

输出:

Input: (2 h 9 min from now) | +18.7 feet
a: 2 h 9 min from now
b: 18.7 feet

<强> See online demo here

答案 1 :(得分:0)

您可以使用:

String s = "(2 h 9 min from now) | +18.7 feet";
Pattern p = Pattern.compile("^\\(([^)]+)\\)\\s*\\|\\s*\\+(.*)$");
Matcher m = p.matcher(s);
if (m.find())               
    System.out.println(m.group(1) + " :: " + m.group(2)); 

 // 2 h 9 min from now :: 18.7 feet

答案 2 :(得分:0)

StringTokenizer stringtokenizer = new StringTokenizer("Your string", "|");
while (stringtokenizer.hasMoreElements()) {
System.out.println(stringtokenizer.nextToken());
}

答案 3 :(得分:0)

我会分两步完成。

  • 首先,你拆分
  • 然后,你消毒

例如:

// the original text
String text = "(2 h 9 min from now) | +18.7 feet";
// splitting on the "|" separator
String[] splitted = text.split("\\|");
// printing the raw "split" array
System.out.println("Raw: " + Arrays.toString(splitted));
// iterating over the raw elements of the array
for (String split: splitted) {
    // replacing all "raw" strings with the group composed of 
    // word characters in between non word characters (if any)
    System.out.println(split.replaceAll("^\\W*(.+?)\\W*$", "$1"));
}

输出:

Raw: [(2 h 9 min from now) ,  +18.7 feet]
2 h 9 min from now
18.7 feet

不是最干净的解决方案,但它会给你一个开始。