2011-06-10 108 views
4

我試圖解析字符串是這樣的:字符串解析Java中

輸入「20:00」 - 輸出將是「20」 輸入「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]));返回v.equals(「0」)? 「」:v;' – OscarRyz 2011-06-10 20:49:13

+0

'!「00」.equals(「0」)' – 2011-06-10 21:04:32

+0

我還希望允許輸入「2:30」空格。在這種情況下,我相信Interger.parseInt會炸燬。 – Rishi 2011-06-10 21:25:14

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

這樣你就不必掃描字符串兩次 - 一次用於分割,一次用於檢查第一次分割。而且,如果您的數據更復雜,則可以使用正則表達式或其他方法使掃描器更加複雜。