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

时间:2015-01-21 06:08:59

标签: java android android-edittext

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

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

使用" ," (逗号)作为分隔符,所以当一个"将输入字符串拆分为float数组时,"发生。

我想忽略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]);
}

- DEBUG 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$1.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

2 个答案:

答案 0 :(得分:0)

你可以使用这样的正则表达式:

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

答案 1 :(得分:0)

这个简单的功能怎么样(这里的IdeOne链接: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]);