2016-06-03 6 views
3

Ich habe eine Zeichenfolge wie diese "Humidity: 14.00% Temperature:28.00 C".Extrahieren Float-Werte aus einer Zeichenfolge in Java

Ich möchte die zwei float-Werte aus der Zeichenfolge extrahieren, wie kann ich das tun?

+1

Dem * richtigen * Weg, dies zu tun, ist die Grammatik der Zeichenfolge zu studieren und einen * Parser * (zum Beispiel bauen, '%' ist eine Division durch 100-Operator und "C" bezeichnet das Celcius-Temperaturschema. Alternativ könnten Sie etwas mit 'java.lang.String # substring' und' Float # parseFloat' aushacken. Plus eine für die Beratung vor dem Start auf, was sich als eine schreckliche Lösung erweist. – Bathsheba

+0

Müssen Sie die Nummern ihren Etiketten zuordnen, oder können Sie darauf zählen, dass sie immer in der gleichen Reihenfolge sind? Werden die Zahlen immer Dezimalpunkte enthalten? Wenn ja, wird es immer Ziffern vor und nach dem Komma geben? –

Antwort

3

(Haftungsausschluss: Sie sollten @Andrew Tobilko Antwort suchen, wenn Sie einige viel sauberer und wiederverwendbaren Code möchten).

Zuerst müssen Sie Ihre Zeichenfolge in zwei Teilstrings trennen. Sie können String a = yourString.substring(10,14); String b =yourString.substring(29,33);

Dann dies mit tun, verwenden Sie Float.parseFloat (String s) einen Schwimmer aus Saiten zu extrahieren:

Float c=Float.parseFloat(a); Float d= Float.parseFloat(b); 

dass, wenn Ihr String ist genau die, die Sie geschrieben haben. Andernfalls sollten Sie sicherstellen, dass Sie die richtigen Indizes verwenden, wenn Sie StringString (int beginIndex, int endIndex) aufrufen.

5

Zuerst sehen Sie sich @Bathsheba `s Kommentar.
Ich habe einen direkten Weg, aber das ist nicht clever oder universell.

String[] array = string.replaceAll("[Humidity:|Temperature:|C]", "").split("%"); 

Sie werden String[]{"14.00", "28.00"} erhalten und dann können Sie diese Werte des Arrays in Float unter Verwendung Float.parse() oder Float.valueOf() Methoden konvertieren.

Arrays.stream(array).map(Float::valueOf).toArray(Float[]::new); 
1

Sie können dies versuchen, mit regex

String regex="([0-9]+[.][0-9]+)"; 
String input= "Humidity: 14.00% Temperature:28.00 C"; 

Pattern pattern=Pattern.compile(regex); 
Matcher matcher=pattern.matcher(input); 

while(matcher.find()) 
{ 
    System.out.println(matcher.group()); 
}