2011-06-10 2 views
4

Я пытаюсь разобрать строку что-то вроде этого:Строка Синтаксический в Java

Input «20:00» - результат будет «20» Input «02:30» - результат будет «2» Ввод «00:30» - выход будет «».

Вот как я написал, мне не нравится, как я это делаю, ища более эффективный способ сделать это может быть в одном сканировании. Есть идеи?

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; 
} 

ответ

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

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

+0

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

+0

что я также хочу разрешить пробелы« 2:30 »на входе. В таком сценарии я верю, что Interger.parseInt взорвется. – Rishi

1

Вы можете использовать java.util.Scanner. Предполагая, что ваши данные всегда отформатированы \d\d:\d\d, вы можете сделать что-то вроде этого.

Scanner s = new Scanner(input).useDelimiter(":"); 
int n = s.nextInt(); 
if (n == 0) { 
    return ""; 
} else { 
    return Integer.toString(n) 
} 

Таким образом, вам не нужно сканировать строку дважды - один раз для разделения и один раз для проверки первого сплита. И, если ваши данные более сложны, вы можете сделать свой сканер более сложным с использованием регулярных выражений или чего-то еще.

Смежные вопросы