2010-12-06 5 views
1

J'ai une chaîne qui a des données telles que:Comment retourner un flottant en commençant à un certain index dans une chaîne?

String data = "Some information and then value1=17561.2 and then value2=15672.2" 

Comment puis-je retourner 17561,2 le plus efficacement possible en Java?

String queryString = "value1"; 

while data.charAt(outputStr.indexOf(queryString)+queryString.length()) is a number 

    -save it to an array 
    which you later convert to a String 

elihw 

Cela semble plutôt compliqué.

Est-ce que les regexs seraient parfaits ici? Comment est-ce que je créerais une expression régulière pour faire ceci?

+0

la regex En cas de défaillance sur les entiers, ou faut-il trouver ceux aussi? –

+0

Il devrait trouver tous les nombres valides, entiers inclus, mais je pense que les données auront généralement des composants fractionnaires. – sova

Répondre

1

Pour trouver un nombre décimal (ou un int) dans une chaîne, vous pouvez utiliser l'expression régulière

[+-]?(?:\d*\.\d+|\d+) 

Ce ne trouvera pas des flotteurs en notation exponentielle, bien que (1.2E15 ou quelque).

Explication:

[+-]?  # optional sign 
(?:  # either 
\d*\.\d+ # float with optional integer part 
|  # or 
\d+  # just integer 
) 

En Java (itérer sur tous les matches dans une chaîne):

Pattern regex = Pattern.compile("[+-]?(?:\\d*\\.\\d+|\\d+)"); 
Matcher regexMatcher = regex.matcher(subjectString); 
while (regexMatcher.find()) { 
    // matched text: regexMatcher.group() 
    // match start: regexMatcher.start() 
    // match end: regexMatcher.end() 
} 
Questions connexes