繁体   English   中英

如何删除字符串中除“1”和“2”之外的所有数字?

[英]How to remove all number in string except “1” and “2”?

我想删除String中的所有数字,但独立的数字12除外。 然后我想用one替换1 ,用2替换two

比如我期望的输入和output如下:

String myString = "Happy New Year 2019, it's 1 January now,2 January tommorow";

预期 output:

myString = "Happy New Year, it's one January now,two January tommorow";

所以, 201912被删除了,但是单独的12被替换为onetwo

我试过使用正则表达式,但所有数字都被删除了。 这是我的代码:

public String cleanNumber(String myString){
    String myPatternEnd = "([0-9]+)(\\s|$)";
    String myPatternBegin = "(^|\\s)([0-9]+)";
    myString = myString.replaceAll(myPatternBegin, "");
    myString = myString.replaceAll(myPatternEnd, "");
    return myString;
}

我也尝试用这个正则表达式[1][2]替换,但2019变成two0one9

我不知道如何改变这个独立的12 有什么建议吗?

您可以按以下顺序使用replaceAll

myString = myString
          .replaceAll("\\b1\\b", "one") // replace 1 by one
          .replaceAll("\\b2\\b", "two") // replace 2 by two
          .replaceAll("\\s*\\d+", "");  // remove all digits

//=> Happy New Year, it's one January now,two January tommorow

此外,在替换12使用字边界也很重要,以避免将这些数字作为其他数字的一部分进行匹配。

您可以对String#replaceAll进行两次调用,其中正则表达式模式在12的任一侧查找数字:

public String cleanNumber(String myString) {
    return myString.replaceAll("(?<!\\d)1(?!\\d)", "one")
                   .replaceAll("(?<!\\d)2(?!\\d)", "two");
}

Output:

Happy New Year 2019, it's one January now,two January tommorow

灵感来自: Java 正则表达式替换由非字母数字字符包围的字符串

首先替换一位数的 1 和 2,然后删除所有其他数字

public String cleanNumber( String s ){
  s = s.replaceAll( "(\\D)1(\\D)", "$1one$2" ).replaceAll( "(\\D)2(\\D)", "$1two$2" );
  return( deleteChars.apply( s, "0123456789" ) );
}

String myString = "Happy New Year 2019, it's 1 January now,2 January tommorow";
cleanNumber( myString );  // Happy New Year , it's one January now,two January tommorow

在这里找到 deleteChars

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM