2014-12-02 4 views
-2

습도 측정 문자열이 공백없이 표시되므로 Android 앱에 결과를 표시 할 때 다음과 같이 표시됩니다. 36.5036.5036.5036.2036.2036.2036.2036.10. 이제 습도를 그래프로 나타내려고합니다. 따라서 숫자를 나누어 배열에 저장해야합니다. ,문자열을 분할하여 배열에 저장하는 방법

String parts[] = response.split("(?<=\\G.{5})"); 
double[] partsD = new double[parts.length]; 
for(int i = 0; i < parts.length; i++) 
{ 
    partsD[i] = Double.parseDouble(parts[i]); 
} 

내가 문제가 코드의 일부에 있음을 확신 :

double[] temp= {36.50, 36.50, 36.50, 36.20, 36.20, 36.20, 36.10}; 

이 내가 뭘하려하지만, 그 (응용 프로그램 충돌) 작동하지 :이 같은 것을 필요 나는 그것을 버리려고했기 때문에 상상의 온도로 배열을 만들었고 잘 그렸습니다.

12-02 12:08:52.484: E/AndroidRuntime(27004): FATAL EXCEPTION: main 
12-02 12:08:52.484: E/AndroidRuntime(27004): java.lang.RuntimeException: Unable to start activity  ComponentInfo{com.Graph/com.Graph.second}: java.lang.NumberFormatException: Invalid double:  "36.5036.5036.5036.2036.2036.2036.2036.1036.1036.1036.1036.1036.1036.1036.1036.1036.1036.1036.1036.10 " 
12-02 12:08:52.484: E/AndroidRuntime(27004): at  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at  android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2357) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at android.app.ActivityThread.access$600(ActivityThread.java:153) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at android.os.Looper.loop(Looper.java:137) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at android.app.ActivityThread.main(ActivityThread.java:5226) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at java.lang.reflect.Method.invokeNative(Native Method) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at java.lang.reflect.Method.invoke(Method.java:511) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:112) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at dalvik.system.NativeStart.main(Native Method) 
12-02 12:08:52.484: E/AndroidRuntime(27004): Caused by: java.lang.NumberFormatException: Invalid double:  "36.5036.5036.5036.2036.2036.2036.2036.1036.1036.1036.1036.1036.1036.1036.1036.1036.1036.1036.1036.10" 
12-02 12:08:52.484: E/AndroidRuntime(27004): at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at java.lang.StringToReal.parseDouble(StringToReal.java:269) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at java.lang.Double.parseDouble(Double.java:295) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at com.Graph.second.onCreate(second.java:49) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at android.app.Activity.performCreate(Activity.java:5104) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
12-02 12:08:52.484: E/AndroidRuntime(27004): at  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261) 
12-02 12:08:52.484: E/AndroidRuntime(27004): ... 12 more 

가 당신의 소중한 시간 내 주셔서 감사합니다 여기에

로그 고양이입니다.

+0

http://stackoverflow.com/a/3481842/4116091 –

+0

그냥 'response.split (".");'을 사용하십시오. – greenapps

+0

'response.equals ("36.5036.5036.5036.2036.2036.2036.2036.10")'인 경우 정규 표현식이 잘못되어'response'는 나뉘 지 않으며'parts == {response} ' – jhamon

답변

1

이 코드는 점으로 구분 된 두 자리 그룹 두 개로 이루어진 패턴을 찾습니다. 각 일치 항목은 double로 변환되어 배열에 추가됩니다.

Pattern pattern= Pattern.compile("\\d{2}.\\d{2}"); 
Matcher matcher = pattern.matcher(response); 
if(matcher.matches(){ 
    double[] partsD = new double[parts.length]; 
    for(int i = 1; i < matcher.groupCount(); i++){ 
     partsD[i] = Double.parseDouble(matcher.group(i)); 
    } 
} 

당신은 솔루션에 가까웠다 그러나이 예외 스택에 명시된 것 같이 당신은 response 문자열을 분할하지 못했습니다 :

12-02 12:08:52.484: E/AndroidRuntime(27004): Caused by: java.lang.NumberFormatException: Invalid double:  "36.5036.5036.5036.2036.2036.2036.2036.1036.1036.1036.1036.1036.1036.1036.1036.1036.1036.1036.1036.10" 
+0

감사합니다 jhamon. – sinkoviak

관련 문제