如何优化代码以删除空格和特殊字符?

时间:2018-07-18 06:19:34

标签: java

我要删除空格和特殊字符,并在以下输入之前加上+

String numberTo = "+1-     801-351-9512";

预期输出:

+18013519502

我尝试过的代码:

static String removeWhiteSpaceAndDashFromNumberAndPrependChar(String numberTO) {
  numberTO = StringUtils.deleteWhitespace(numberTO);
  numberTO = StringUtils.remove(numberTO, "-");
  numberTO = StringUtils.prependIfMissing(numberTO, "+", "+");

  return numberTO;
}

5 个答案:

答案 0 :(得分:4)

我想出的最短方法:

String numberTo = "+1- 801-351-9512";
numberTo = "+" + numberTo.replaceAll("\\D", "");

它会删除所有非数字值,然后在同一调用前加上+

答案 1 :(得分:3)

您可以使用String.replaceAll和正则表达式来做到这一点。

static String removeWhiteSpaceAndDashFromNumberAndPrependChar(String number) {
    return "+" + number.replaceAll("[+\\-\\s]+", "");
}

这看起来很简单。

答案 2 :(得分:2)

我可以考虑的一种最优化的方式来声明一个静态最终模式并在您的代码中使用

private static final Pattern pattern = Pattern.compile("\\D");

public static void main(String[] args) {
    String value = "+1- 801-351-9512";

    System.out.println("+" + pattern.matcher(value).replaceAll(""));
}

使用Guava库的另一种方法

value = StringUtils.join("+" + CharMatcher.inRange('0', '9').retainFrom(value));

注意:

您也可以将String的{​​{1}}方法与正则表达式一起使用,但不会对其进行优化。 replaceAll方法始终为每个调用构建模式。如果replaceAll方法在循环中调用,那么无时无刻都会构建每次模式。与第一种方法一样,最好先构建一次模式并在我们的代码中使用

答案 3 :(得分:0)

您可以使用正则表达式删除所有非字母数字字符,以便它为您处理所有事情:

value = "+" + value.replaceAll("[^A-Za-z0-9]", "");

编辑我的答案,因为我刚刚意识到正则表达式中也会删除'+',因此您可以跳过该检查,因为在应用正则表达式后它将不存在预先存在的'+'。 / p>

答案 4 :(得分:-2)

使用正则表达式和replaceAll方法可以实现此目的。 尝试如下

str.replaceAll(“ [-,'']”,“”)。