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

Java 如何优化代码以删除空格和特殊字符?,java,Java,我想删除空白和特殊字符,并在以下输入前加上+: String numberTo = "+1- 801-351-9512"; 预期产出: +18013519502 我尝试过的代码: static String removeWhiteSpaceAndDashFromNumberAndPrependChar(String numberTO) { numberTO = StringUtils.deleteWhitespace(numberTO); numberTO = StringU

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

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;
}

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

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

编辑了我的答案,因为我刚刚意识到正则表达式中的“+”也将被删除,因此您可以跳过检查,因为在应用正则表达式后,它将不具有预先存在的“+”。

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

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

编辑了我的答案,因为我刚刚意识到正则表达式中的“+”也将被删除,因此您可以跳过检查,因为在应用正则表达式后,它将不具有预先存在的“+”。

您可以使用
字符串。replaceAll
和regex来执行此操作

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

这看起来很简单。

您可以使用
String.replaceAll
和regex来执行此操作

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

这看起来很简单。

我能想到的最短方法是:

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

它删除所有非数字值,然后在同一个调用中预先添加
+
,这是我能想到的最短方法:

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

它删除所有非数字值,然后在同一调用中使用正则表达式和replaceAll方法预先添加
+
。 试试下面这样


str.replaceAll(“[-,”)。

使用正则表达式和replaceAll方法可以实现这一点。 试试下面这样


str.replaceAll(“[-,”)。

我能想到的声明静态最终模式并在代码中使用的最优化方法

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(""));
}
另一种使用番石榴库的方法

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


您还可以使用正则表达式使用
String
replaceAll
方法,但不会对其进行优化。
replaceAll
方法始终为每个调用构建模式。如果在循环中调用了
replaceAll
方法,那么每次都会毫无理由地构建模式。与第一种方法相同,最好只构建一次模式并在代码中使用,

这是我能想到的声明静态最终模式并在代码中使用的最优化的方法

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(""));
}
另一种使用番石榴库的方法

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



您还可以使用正则表达式使用
String
replaceAll
方法,但不会对其进行优化。
replaceAll
方法始终为每个调用构建模式。如果在循环中调用了
replaceAll
方法,那么每次都会毫无理由地构建模式。与第一种方法相同,最好只构建一次模式并在我们的代码中使用,

是的,您的方法可以执行一次传递,并删除所有非数字字符。您询问过“删除特殊字符”,但您的方法只删除空格和破折号。我对您当前的方法没有太大的问题,我想不出更好的方法来实现这一点。使用
numberTO=numberTO.replaceAll(\\D“,”)至少可以缩短为2个方法调用
numberTO=StringUtils.prependIfMissing(numberTO,“+”,“+”)如果您的编码尝试没有“中断”,并且您希望收到对代码的审阅,那么我建议将您的问题迁移到CodeReview,因为他们就是这样做的。答案将被深入考虑,通常更具教育性/综合性。是的,您的方法可以通过一次,并删除所有非数字字符。您询问过“删除特殊字符”,但您的方法只删除空格和破折号。我对您当前的方法没有太大的问题,我想不出更好的方法来实现这一点。使用
numberTO=numberTO.replaceAll(\\D“,”)至少可以缩短为2个方法调用
numberTO=StringUtils.prependIfMissing(numberTO,“+”,“+”)如果您的编码尝试没有“中断”,并且您希望收到对代码的审阅,那么我建议将您的问题迁移到CodeReview,因为他们就是这样做的。答案将被深入考虑,通常更具教育性/综合性。
\\D
要短得多,并且具有相同的效果
\\D
要短得多,并且具有相同的效果字母数字->数字
+
只有在missing@Lino因为它正在被移除,其实没有必要check@XtremeBaumer没错,
\D
匹配每个非数字。学到了一些新的东西:)字母数字->数字
+
只有在missing@Lino由于它正在被移除,实际上没有必要这样做check@XtremeBaumer没错,
\D
匹配每个非数字。学到了一些新东西:)
-
表示一个范围,应该转义。另外,不需要
,最后
'
不表示空白,只需删除
谢谢。更正了这个表情。str.replaceAll(“[\\-]”,“”)<代码>-
表示应转义的范围。另外,不需要
,最后
'
不表示空白,只需删除
谢谢。更正了这个表情。str.replaceAll(“[\\-]”,“”)<代码>模式
是一种在循环中必须替换多个数字的方法+1
模式
是一种在循环中必须替换多个数字的方法+1.