【问题标题】:How to add spaces between numbers in string with word and integer?如何使用单词和整数在字符串中的数字之间添加空格?
【发布时间】:2013-05-30 14:53:35
【问题描述】:

有这样的字符串

“APM35 2FAST4YOU -5ABBA STEVE0.5&Tom”

并使用正则表达式我没有得到我想要的结果。如何在每个整数之前和之后添加空格? 代码:

String s = "APM35 2FAST4YOU -5ABBA STEVE0.5&Tom";
s = s.replaceAll("(\\d)([A-Za-z])", "\\1 \\2");
System.out.println(s);

我得到这样的结果:

APM35 1 2AST1 2OU -1 2BBA STEVE0.5&Tom

我想得到这个字符串作为结果:

APM 35 2 FAST 4 YOU -5 ABBA STEVE 0.5 &Tom

【问题讨论】:

  • IMO 我不会为此使用String#replaceAll
  • @LuiggiMendoza 你会怎么做?
  • @LuiggiMendoza 请随意给我任何你想到的建议。
  • 我会逐个字符地遍历String 字符并定义数字(注意它可以包含一个点.)和一个非数字String 之间的差异(因为& 之类的符号不在 [A-Za-z] 内)。另外,你不知道哪个会先来。
  • @LuiggiMendoza 正则表达式会更短

标签: java string integer space


【解决方案1】:

您可以分两步完成:

String s = "APM35 2FAST4YOU -5ABBA STEVE0.5&Tom";
//add a space after the numbers
String step1 = s.replaceAll("(-?\\d\\.?\\d*)([^\\d\\s])", "$1 $2");
//add a space before the numbers
String step2 = step1.replaceAll("([^0-9\\-\\s])(-?\\d\\.?\\d*)", "$1 $2");

【讨论】:

    【解决方案2】:

    试试这个:

    s.replaceAll("([^\\d-]?)(-?[\\d\\.]+)([^\\d]?)", "$1 $2 $3").replaceAll(" +", " ");
    

    第一个正则表达式可以生成一些额外的空格,它们被第二个删除。

    【讨论】:

    • 漂亮的代码,用replaceAll(" {2,}", " ")然后replaceAll(" +", " ")删除所有额外的空格不是更好
    【解决方案3】:

    您可以使用表达式“(-?[0-9]+(\.[0-9]+)?)”

    (0.5不是整数,如果你只想要整数(-?[0-9]+)就足够了)

    并用“\1”或“$1”替换它(不知道哪个是正确的Java)(之前和之后的空格)

    【讨论】:

      【解决方案4】:

      对不起,我写得太快了,但我不妨问一下:你确定 Java 的正则表达式 API 能够识别一个组(\1 和 \2)吗?

      因为字符串的某些部分似乎被实际的 1 和 2 替换,所以这可能不是正确的语法。

      (而且您似乎只检查数字后跟文本,而不是其他方式。)

      【讨论】:

      • 我认为应该是 1 美元和 2 美元。
      猜你喜欢
      • 2012-02-08
      • 2011-04-28
      • 1970-01-01
      • 2021-07-22
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      相关资源
      最近更新 更多