我需要在以下任何序列上拆分字符串:
1个或多个空格
0或更多空格,后跟逗号,后跟0或更多空格,
0或更多空格,后跟"=>",后跟0或更多空格
之前没有使用Java正则表达式的经验,所以我有点困惑.谢谢!
示例:
添加r10,r12 => r10
存储r10 => r1
Nik*_*bak 33
只需创建匹配任何三种情况的正则表达式并将其传递给split方法:
string.split("\\s*(=>|,|\\s)\\s*");
Run Code Online (Sandbox Code Playgroud)
正则表达式在字面上意味着
\\s*)=>|,|\\s)\\s*)如有必要\\s,您可以用空格字符替换空格(检测空格,制表符,换行符等).
Ber*_*t F 16
为简单起见,我将把"space"() as "any whitespace" (\s).
翻译您的规范或多或少"逐字逐句"是划分以下任何一个:
\s+\s*),后跟逗号(,),后跟0或更多空格(\s*)
\s*,\s*\s*),后跟"=>"(=>),后跟0或更多空格(\s*)
\s*=>\s* 要匹配上述任何一项: (\s+|\s*,\s*|\s*=>\s*)
但是,您的规范可以"减少"为:
\s*,(\s|,|=>)\s*把它们放在一起: \s*(\s|,|=>)\s*
简化形式绕过一些极端情况,严格翻译形式,使一些意想不到的空"匹配".
这是一些代码:
import java.util.regex.Pattern;
public class Temp {
// Strictly translated form:
//private static final String REGEX = "(\\s+|\\s*,\\s*|\\s*=>\\s*)";
// "Reduced" form:
private static final String REGEX = "\\s*(\\s|=>|,)\\s*";
private static final String INPUT =
"one two,three=>four , five six => seven,=>";
public static void main(final String[] args) {
final Pattern p = Pattern.compile(REGEX);
final String[] items = p.split(INPUT);
// Shorthand for above:
// final String[] items = INPUT.split(REGEX);
for(final String s : items) {
System.out.println("Match: '"+s+"'");
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Match: 'one'
Match: 'two'
Match: 'three'
Match: 'four'
Match: 'five'
Match: 'six'
Match: 'seven'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41950 次 |
| 最近记录: |