2016-11-27 6 views
0

文字列から数値を取得したい。このクラスの文字列から数値を取得するsubstring()が機能していない

マイコードは次のとおりです。

XMLは正しいダウンロードされ、それは私の値の文字列を設立しかし、私は、文字列から数値を取得していません。 innerValue

public class XMLProcessor extends AsyncTask<String, Void, String> { 

    private String rssURL; 
    private PostParserDelegate delegate; 
    private ArrayList<Post> posts; 
    String euro; 
    private StringBuilder buffer; 

    TextView mxntoeur; 
    TextView eurtomxn; 

    public XMLProcessor(String rssURL, PostParserDelegate delegate) { 
     this.rssURL = rssURL; 
     this.delegate = delegate; 
     posts = new ArrayList<Post>(); 
    } 

    @Override 
    protected String doInBackground(String... strings) { 
     buffer = new StringBuilder(); 

     try { 
      URL url = new URL(rssURL); 
      HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 

      // HTTP Status "OK" -> HTTPCODE 200 
      int httpResponse = httpURLConnection.getResponseCode(); 
      if (httpResponse != 200) { 
       throw new Exception("Fehlercode: " + httpResponse); 
      } 

      InputStream input = httpURLConnection.getInputStream(); 
      InputStreamReader reader = new InputStreamReader(input); 

      int charactersRead; 
      char[] tmpChars = new char[400]; 

      while (true) { 
       charactersRead = reader.read(tmpChars); 
       if (charactersRead <= 0) { 
        break; 
       } 

       buffer.append(String.copyValueOf(tmpChars, 0, charactersRead)); 
      } 

      return buffer.toString(); 

     } catch (Exception e) { 
      Log.e("XMLProcessor", e.getMessage()); 
      Log.e("XMLProcessor", e.getStackTrace().toString()); 
     } 

     return String.valueOf(0); 
    } 


    @Override 
    protected void onPostExecute(String aDouble) { 
     super.onPostExecute(aDouble); 

     parse(); 
    } 

    protected void parse() 
    { 
     String rawXML = buffer.toString(); 
     Post aPost = null; 
     boolean isProcessingItem = false; 
     String innerValue =""; 

     try { 
      XmlPullParserFactory pullParserFactory = XmlPullParserFactory.newInstance(); 
      XmlPullParser parser = pullParserFactory.newPullParser(); 
      parser.setInput(new StringReader(rawXML)); 

      int event = parser.getEventType(); 
      while (event !=XmlPullParser.END_DOCUMENT) 
      { 
       String tag = parser.getName(); 

       switch (event) { 
        case XmlPullParser.START_TAG: 
         if (tag == "item") { 
          Log.d("XMLProcessor", "Neuer Post!"); 
          isProcessingItem = true; 
          aPost = new Post(); 
         } 
         break; 

        case XmlPullParser.TEXT: 
          innerValue = parser.getText(); 
         break; 

        case XmlPullParser.END_TAG: 
         if (isProcessingItem){ 
          if (tag == "item") { 
           posts.add(aPost); 
           isProcessingItem = false; 
          } 
         } else if (tag == "description") { 
          aPost.setPesoInEuro(innerValue); 
          euro = new String(innerValue.substring(13,21)); 
          //euro = innerValue.substring(13,21); 
          eurtomxn.setText(euro); 
         } 
         break; 
       } 

       event = parser.next(); 
      } 

      delegate.xmlFeedParsed(posts); 

     } catch (Exception e) { 
      Log.e("XMLProcess", e.getStackTrace().toString()); 
     } 
    } 
} 

私は

/n 1.00 EUR = 21.90612 MXN<br/>\n 1.00 MXN = 0.04565 EUR<br/>\n 
<a  href="http://eur.de.fxexchangerate.com/mxn/">Converter</a>--\n 
<a href="http://eur.de.fxexchangerate.com/mxn-exchange-rates-history.html">Historische 
</a> 
\n. 

を必要とするものを正しいスティングを取得しかし、私の問題は、私はこの数21.90612を必要とすること、です。私はsubstring(13,21)で試してみましたが、動作しませんでした。

アイデアはありますか?問題を解決する方法はありますか?

は、それが正確に問題が何であるかを非常に明確ではありませんあなた

+0

"が、それは何の作業ではなかった" という意味?どのように正規表現を使用するのですか? –

+0

また、javaの文字列とequalsを比較し、 'new String(someString)'は*コードの臭いです* –

+0

私はこのコードでも試しています: "euro = innerValue.substring(13,21);"だから私はindexnumer 13から21までの文字列を持って来なければならないので、変数 "ユーロ"に数値を書き込まなければなりません。この変数は、私はそれがユーロは倍精度変数であり、私はそれが文字列であることを試してみることがあります。しかし、この変数は常にnullです。 – Max

答えて

0

ありがとうあなたは例外を示す場合、それは有用であろう!

文字列innerValueに有効な長さがあるかどうかを確認しましたか?

if(innerValue.lenght() >= 21){euro = innerValue.substring(13,21);} else {/* Do something here!*/} 

}