2011-06-10 5 views
4

Je tente d'analyser une chaîne de quelque chose comme ceci:Chaîne Parsing en Java

entrée « 20:00 » - sortie serait « 20 » entrée « 02:30 » - sortie serait « 2 » Entrée "00:30" - la sortie serait "".

Voici comment j'ai écrit, je n'aime pas la façon dont je le fais, à la recherche d'une façon plus efficace de le faire en un seul balayage. Des idées?

private String getString(final String inputString) 
{ 
    String inputString = "20:00"; // This is just for example  
    final String[] splittedString = inputString.split(":"); 
    final String firstString = splittedString[0]; 
    int i; 
    for (i = 0; i < firstString.length(); i++) 
    { 
     if (firstString.charAt(i) != '0') 
     { 
      break; 
     } 
    } 

    String outputString = ""; 
    if (i != firstString.length()) 
    { 
     outputString = firstString.substring(i, firstString.length()); 
    } 

    return outputString; 
} 

Répondre

2
final String firstString = splittedString[0]; 
int value = Integer.parseInt(firstString); 
return value == 0 ? "" : Integer.toString(value); 
+1

'Chaîne v = Integer.toString (Integer.parseInt (input.split (": ") [0])); return v.equals ("0")? "": v; ' – OscarRyz

+0

'! "00" .equals ("0") ' –

+0

ce que je veux aussi autoriser" 2:30 "espaces en entrée. Dans un tel scénario, je crois que Interger.parseInt va exploser. – Rishi

1

Vous pouvez utiliser java.util.Scanner. En supposant que vos données sont toujours formatées \d\d:\d\d, vous pouvez faire quelque chose comme ça. De cette façon, vous n'avez pas besoin de scanner la chaîne deux fois - une fois pour la division et une fois pour vérifier la première division. Et, si vos données sont plus complexes, vous pouvez rendre votre scanner plus sophistiqué en utilisant des expressions rationnelles ou autre chose.