在使用 java 出现分隔符“,”之前删除浮点值中的额外点

Remove extra dots in float value before a separater " , " occurs using java

我正在生成统计计算器应用程序。

所以我想像这样格式化来自 edittext 的输入 i/p = 3.5.6, 6.5 到 3.5, 6.5

使用“,”(逗号)作为分隔符,以便在出现“,”时将输入字符串拆分为浮点数组。

我想忽略 3.5[.6] 并生成这样的数组 s[1] = 3.5 , s[2] = 6.5

在计算平均应用程序因额外的“.”点而崩溃时。

s = it.getText().toString(); //"it" is edittext
s=s.replaceAll( ",+" , "," );
String[] strarray =s.split(",");

float[] farray = new float[strarray.length];
for(int i = 0; i < strarray.length; i++) 
{
    farray[i] = Float.parseFloat(strarray[i]);
}

--调试LOGCAT--

W/dalvikvm(3051): threadid=1: thread exiting with uncaught exception     (group=0x40a71930)
    FATAL EXCEPTION: main
    java.lang.NumberFormatException: Invalid float: "6.7."
    at java.lang.StringToReal.invalidReal(StringToReal.java:63)
    at java.lang.StringToReal.parseFloat(StringToReal.java:310)
    at java.lang.Float.parseFloat(Float.java:300)
    at com.cal.mc2.Mean.onClick(Mean.java:67)
    at android.view.View.performClick(View.java:4204)
    at android.view.View$PerformClick.run(View.java:17355)
    at android.os.Handler.handleCallback(Handler.java:725)`
   `at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5041)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    at dalvik.system.NativeStart.main(Native Method)
    Force finishing activity com.cal.mc2/.Mean

您可以像这样使用正则表达式:

public static void main(String[] args) {
    String s = "3.5.6, 6.5";
    s = s.replaceAll("(?<=\d\.\d)\.\d", "");// positive look behind. Only replace `.[digit]` if it is preceeded by [digit][.][digit]
    System.out.println(s);
    String[] arr = s.split(",");
    System.out.println(Arrays.toString(arr));

}

O/P :

3.5, 6.5   --> value of s after replacement
[3.5,  6.5]  --> array contents

这个简单的函数怎么样(IdeOne link 这里:https://ideone.com/utKPjP):

public static float myParseFloat(String str) {
    int firstDot = str.indexOf('.');
    if (firstDot != -1) {
        int secondDot = str.indexOf('.', firstDot+1);
        return Float.parseFloat(secondDot == -1 ? str : str.substring(0,secondDot));
    }
    return Float.parseFloat(str);
}

那么你只需在你的代码中替换这条语句:

farray[i] = Float.parseFloat(strarray[i]);

与:

farray[i] = myParseFloat(strarray[i]);