我想只从字符串中保存数字和一个小数,但没有找到任何只能存储一个小数的情况。我看到的代码与此类似
String str="12.2.3.4";
String a=str.replaceAll("[^\\d.]", "");
System.out.println(a);
我该怎么做只保留一个小数并删除其他。我想以这种形式获得输出
12.234
答案 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#split
和StringBuilder
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());
}
}