2011-06-10 109 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) 
} 

这样你就不必扫描字符串两次 - 一次用于分割,一次用于检查第一次分割。而且,如果您的数据更复杂,则可以使用正则表达式或其他方法使扫描器更加复杂。