给定一个随机字符串,我希望能够从我的字符串(+
,-
,*
,/
)中提取某些字符,一个接一个
假设字符串为wejri+234-wer*324sdf/
如何检索这4个操作符?
如果我必须在这些运算符之间提取所有内容,我会使用String.split("\\+|\\-|\\*|\\/");
,但如果我必须反过来这样做,我将如何实现呢?
这些运营商之间的字符数量可能会有很大差异。
答案 0 :(得分:3)
您可以使用正则表达式删除除+, -, *, /
之外的所有字符:
String text = "wejri+234-wer*324sdf/";
String res = text.replaceAll("[^+\\-\\*/]", ""); // - and * need to be escaped
// > res = "+-*/"
答案 1 :(得分:2)
您可以使用Guava的CharMatcher:
System.out.println(
CharMatcher.JAVA_LETTER_OR_DIGIT
.and(CharMatcher.ASCII)
.removeFrom("wejri+234-wer*324sdf/"));
输出:
+ - * /
或者,如果你想使用正则表达式,我会选择\w
字符类:
System.out.println("wejri+234-wer*324sdf/".replaceAll("\\w+",""));
更新:CharMatcher.JAVA_LETTER_OR_DIGIT
已被弃用,并且没有规范替换,但您可以轻松自行推送:
private static final CharMatcher JAVA_LETTER_OR_DIGIT =
CharMatcher.forPredicate(Character::isJavaIdentifierPart)
.precomputed();
请注意,您希望将其存储在常量中,因为预计算是一项适度昂贵的操作,并且您不希望每次都这样做。