这似乎是一个基本的东西,但我似乎无法理解正则表达式我以前从未真正使用它们,现在我遇到了他们将有用的时间。
我查看过去一小时的例子和过去的问题,但仍然不理解。我的问题是我有一个字符串
"(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(如果那是正确的话)变成正则表达式之外的字符串
答案 0 :(得分:2)
由于您要删除一些字符(()
和+
),最安全的方法是与Pattern
和Matcher
类匹配的标准正则表达式:
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
不是最干净的解决方案,但它会给你一个开始。