【问题标题】:Java: Replace all non-digit symbols except symbol "+" on the first positionJava:替换除第一个位置的符号“+”之外的所有非数字符号
【发布时间】:2014-12-22 17:44:42
【问题描述】:

我想按照这样的规则格式化输入的字符串:替换字符串中除第一个位置以外的所有非数字符号:它应该只是数字或符号“+”。

我使用正则表达式功能

private static final String REGEXP_NOT_DIGITS = "[^\\+0-9]";

String result = sample.replaceAll(REGEXP_NOT_DIGITS, "");

但是这种替换的结果是在任意位置带有数字和“+”符号的字符串。 请帮助我澄清我的条件,即我将替换所有“+”符号,除了该行中的 1 个位置。

编辑。现在的输出是:

样本[0] 样本 = 0123456789;结果 = 0123456789 预期:0123456789

样本[1] 样本 = +380+380+380+;结果 = +380+380+380+ 预期:+380380380

样本[2] 样本 = dd0 11 22 33 44 55;结果 = 01122334455 预期:01122334455

样本[3] 样本 = +380-456(789);结果 = +380456789 预期:+380456789

样本[4] 样本 = d3+580 456 789;结果 = 3+580456789 预期:3580456789

样本[5] 样本 = +380456789;结果 = +380456789 预期:+380456789

一切正常,除了字符串中有符号“+”

【问题讨论】:

  • 提供一个示例以及预期的输出..
  • 你能添加一些示例输入和输出字符串吗?
  • @Alex 你能为每个样本添加预期的输出吗?

标签: java regex replaceall


【解决方案1】:

你可以使用:

String result = sample.replaceAll("(?!^)\\+|[^+\\d]+", "");

RegEx Demo

(?!^)\\+ 是一个负前瞻,它将匹配 + 的所有位置,除了行首。

【讨论】:

    【解决方案2】:

    你可以试试下面的正则表达式,

    (?!^\\+)\\D
    

    匹配除开头的+ 符号之外的任何非数字字符。

    DEMO

    String result = sample.replaceAll("(?!^\\+)\\D", "");
    

    【讨论】:

      【解决方案3】:

      这个怎么样:

      "^[^\\d+]|\\D"

      【讨论】:

      • 我不确定左边应该是什么意思。但右侧将匹配字符串中的所有个非数字。
      • @Robert 如果您知道操作需求,请编辑上述问题。
      • 对,这就是我们需要的,不是吗?左边既不是数字也不是行首的加号。
      • 我的意思是"\\D" 也匹配行首的加号。我假设这不是故意的。您还在开头"^[^\\d+]" 不匹配的事物列表中添加了它。
      • 不太好。第一个“+”丢失... sample[0] sample = 0123456789;结果 = 0123456789 样本[1] 样本 = +380+380+380+;结果 = 380380380 样本 [2] 样本 = dd0 11 22 33 44 55;结果 = 01122334455 样本[3] 样本 = +380-456(789);结果 = 380456789 样本[4] 样本 = d3+580 456 789;结果 = 3580456789 样本 [5] 样本 = +380456789;结果 = 380456789
      猜你喜欢
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 2017-06-04
      • 2018-10-05
      • 1970-01-01
      相关资源
      最近更新 更多