在字符串中只保留一个小数

时间:2015-09-28 19:16:19

标签: java string

我想只从字符串中保存数字和一个小数,但没有找到任何只能存储一个小数的情况。我看到的代码与此类似

String str="12.2.3.4";
String a=str.replaceAll("[^\\d.]", "");
System.out.println(a);

我该怎么做只保留一个小数并删除其他。我想以这种形式获得输出

12.234

4 个答案:

答案 0 :(得分:2)

以下是使用StringBuilder

执行此操作的另一种方法
StringBuilder sb = new StringBuilder("12.2.3.4");

int firstPosition = sb.indexOf(".");

for ( int lastPosition = sb.lastIndexOf(".");
      lastPosition > firstPosition;
      lastPosition = sb.lastIndexOf(".", lastPosition ) ) {
    sb.deleteCharAt(lastPosition);
}

String result = sb.toString();

这基本上会查找从右侧开始到左侧的所有.次出现,只要它们不是第一个.,并删除它们中的每一个。

如果只有一个小数或根本没有,则循环条件从一开始就为假,因此不会进行任何更改。

答案 1 :(得分:1)

StringBuilder sb = new StringBulder();
String[] as = str.split("\\.");
sb.append(as[0]);
if(as.length > 1) {
  sb.append(".");
}
for(int i = 1; i < as.length; i ++) {
  sb.append(as[i]);
}
return sb.toString();

答案 2 :(得分:1)

你可以用老式的方式做到这一点

public String formatOneDecimalPoint(String str) {
  StringBuilder sb = new StringBuilder();
  boolean foundPoint = false;
  for (int i = 0; i < str.length(); i++) {
    if (str.charAt(i) != '.') {
      sb.append(str.charAt(i));
    } else if (!foundPoint) {
      sb.append(str.charAt(i));
      foundPoint = true;
    }
  }
  return sb.toString();
}

答案 3 :(得分:1)

您可以使用String#splitStringBuilder

这样做
public class OneDecimalString {
    public static void main(String args[]) {
        StringBuilder sb = new StringBuilder();
        String str = "12.2.3.4";
        String a[] = str.split("\\.");
        for (int i = 0; i < a.length; i++) {
            sb.append(a[i]);
            if (i == 0) {
                sb.append(".");
            }
        }
        System.out.println("Output: " + sb.toString());
    }
}