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.