如何在 Java 中的数字和字符串之间插入 space?

How to insert a space between a number and a string in Java?

我正在使用 Java 中的 java.util.scanner 功能(太棒了!)但我还没有弄清楚如何扫描附有单位的数字。例如,我知道您可以在数字和非数字字符之间插入空格,这样“47mg”就变成了“47mg”。这将解决大多数情况。但是,到目前为止,我发现的 none 解决方案似乎可以处理其中包含指数的数字(scientific/engineering 表示法)。例如,我希望它将“47E-3mg”转换为“47E-3 mg”。关于如何做到这一点的任何想法?谢谢!

更新:这里有更多背景信息。在 C++ 中,class 具有类似于扫描位的功能,它知道数字在何处停止,并且在附加字符串时不会给出错误。它只是在数字停止的地方停止。这是 C++ 中的一个简单示例:

istringstream myStream;
string tempString;
double tempDouble;
string myString = " USE 1.23E-3mg ";
myStream.str(myString);
myStream >> tempString;
cout << "String:" << tempString << ":" << endl;
myStream >> tempDouble;
cout <<"Double:"<<tempDouble<<endl;
myStream >> tempString;
cout << "String:" << tempString << ":" << endl;
return 0;

它将输出: String:USE: Double:0.00123 String:mg:

更新 2:根据其中一个答案,我认为解决方案很接近。这就是我们现在所拥有的。它几乎可以工作。只需要处理多个条目...有人看到可以更改什么吗?

//String myString = "1.23E-3"; //Works
//String myString = "1.23E-3mg"; //Works
//String myString = "1.23E-3g"; //Works
String myString = "1.23mg 1.23mg";
System.out.println(myString.replaceAll("([a-z]+)$", " 
"));

您可以使用 StringBuilder

StringBuilder sb = new StringBuilder("47E-3mg");
sb.insert(sb.indexOf("mg"), " "); //insert(index, string)
System.out.println(sb);

产量:47E-3 毫克

假设您有以下情况:

String [] data = {"43E-2mg", "96.2mg", "55cc"};

这让您可以用 space 和那些相同的字符替换字符串末尾的一个或多个字符。

for (String s : data) {
    s = s.replaceAll("([a-z]+)$", " ");
    System.out.println(s);
}

打印

43E-2 mg
96.2 mg
55 cc

如果您想捕获单独的部分以进行额外处理,您可以在数量和单位之间的零宽度间隙上拆分。

  • (?<![a-z]) - 前面没有 a-z
  • (?=[a-z]+$) - 后跟一个或多个 a-z 后跟一个新行。
for (String s : data) {
    String[] parts = s.split("(?<![a-z])(?=[a-z]+$)");
    System.out.println(Arrays.toString(parts));
}

打印

[43E-2, mg]
[96.2, mg]
[55, cc]