1

如何在 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

4

3 回答 3

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;
           }
    }
于 2013-04-24T22:20:55.403 回答
-2

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

于 2013-04-24T13:28:36.353 回答
-2

几乎可以肯定,Regex 是您想要的,是的,虽然令人生畏,但您会一遍又一遍地使用它。RMK 部分将是最难的,它是最自由的形式。唯一的选择是使用大量的 if 或 case 语句逐个字符地遍历。

于 2013-04-24T13:23:55.850 回答