【问题标题】:Java get special characters from stringJava从字符串中获取特殊字符
【发布时间】:2016-10-01 01:22:44
【问题描述】:

给定一个随机字符串,我希望能够从我的字符串中提取某些字符(+,-,*,/),一个接一个。

假设字符串是wejri+234-wer*324sdf/ 如何检索这 4 个运算符?

如果我必须提取这些运算符之间的所有内容,我会使用 String.split("\\+|\\-|\\*|\\/");,但如果我必须反过来这样做,我将如何实现?

这些运算符之间的字符数量可能会有很大差异。

【问题讨论】:

    标签: java string substring


    【解决方案1】:

    您可以使用正则表达式删除除+, -, *, / 之外的所有字符:

    String text = "wejri+234-wer*324sdf/";
    String res = text.replaceAll("[^+\\-\\*/]", "");   // - and * need to be escaped
    // > res = "+-*/"
    

    【讨论】:

      【解决方案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();
      

      请注意,您希望将其存储在一个常量中,因为预计算是一项成本适中的操作,而且您不希望每次都这样做。

      【讨论】:

      • 您能否更新答案,因为我收到警告说 JAVA_LETTER_OR_DIGIT 已被弃用。
      猜你喜欢
      • 2016-02-28
      • 2020-08-26
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 2015-02-15
      • 2021-04-26
      • 1970-01-01
      相关资源
      最近更新 更多