METAR报告 - 解析Java

时间:2013-04-24 13:14:03

标签: java android parsing text

如何在Java编程中解析Metar信息? 我在互联网上搜索了很多复杂的东西,我想要更简单的东西。 我不知道如何使用正则表达式或类似的东西...

Metar信息示例:http://weather.noaa.gov/pub/data/observations/metar/stations/ABBN.TXT

  

2011/03/16 05:30 ABBN 160530Z 23004KT 9999 NSC 02 / M05 Q1029   R14R / CLRD60 NOSIG RMK G / O QFE696

请注意,Metar报告可能有以下变化: http://en.wikipedia.org/wiki/METAR

3 个答案:

答案 0 :(得分:1)

我找到了解决方案,有代码(对某人有用):

    for (int i=0; i<httpGet.length(); i++) {  

           char c = httpGet.charAt(i);

           if(c=='M' && Character.isDigit(httpGet.charAt(i+1)) && 
                   Character.isDigit(httpGet.charAt(i+2)) &&
                   httpGet.charAt(i+3)== '/' &&
                   Character.isDigit(httpGet.charAt(i+4))&&
                   Character.isDigit(httpGet.charAt(i+5))&&
                   httpGet.charAt(i+6)==' ' &&
                   Character.isLetter(httpGet.charAt(i+7))){

               temp="-"+httpGet.substring(i+1,i+3);
               dewP=httpGet.substring(i+4,i+6);
               break;
           }

           else if(c=='M' && Character.isDigit(httpGet.charAt(i+1)) && 
                   Character.isDigit(httpGet.charAt(i+2)) &&
                   httpGet.charAt(i+3)== '/' &&
                   httpGet.charAt(i+4)== 'M' &&
                   Character.isDigit(httpGet.charAt(i+5))&&
                   Character.isDigit(httpGet.charAt(i+6))&&
                   httpGet.charAt(i+7)==' ' &&
                   Character.isLetter(httpGet.charAt(i+8))){

               temp="-"+httpGet.substring(i+1,i+3);
               dewP="-"+httpGet.substring(i+5,i+7);
               break;
           }

           else if(Character.isDigit(httpGet.charAt(i)) && 
                   Character.isDigit(httpGet.charAt(i+1)) &&
                   httpGet.charAt(i+2)== '/' &&
                   httpGet.charAt(i+3)== 'M' &&
                   Character.isDigit(httpGet.charAt(i+4))&&
                   Character.isDigit(httpGet.charAt(i+5))&&
                   httpGet.charAt(i+6)==' ' &&
                   Character.isLetter(httpGet.charAt(i+7))){

               temp=httpGet.substring(i,i+2);
               dewP="-"+httpGet.substring(i+4,i+6);
               break;
           }
           else if(Character.isDigit(c) && Character.isDigit(httpGet.charAt(i+1))
                   && httpGet.charAt(i+2)=='/' &&
                   Character.isDigit(httpGet.charAt(i+3)) &&  
                   Character.isDigit(httpGet.charAt(i+4)) &&
                   httpGet.charAt(i+5)==' ' &&
                   Character.isLetter(httpGet.charAt(i+6))){

                temp=httpGet.substring(i,i+2);
                dewP=httpGet.substring(i+3,i+5);
                break;
           }
    }

答案 1 :(得分:-2)

正则表达式几乎肯定是你想要的,是的是令人生畏但你会一遍又一遍地使用它。 RMK部分将是最难的,它是最自由的形式。唯一的选择是逐个字符地使用很多if或case语句。

答案 2 :(得分:-2)

这看起来很有前途,我用谷歌搜索java METAR解析:-) http://jfall-javafx.googlecode.com/svn-history/r6/WeatherFX/src/com/feldt/metar/Metar.java