#java
#java — язык #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;
}
Ответ №1:
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;
2. что такое, я также хочу разрешить пробелы «2: 30» во входных данных. Я полагаю, что в таком сценарии Interger.parseInt взорвется.
3. @Rishi попробуйте передать FirstString.trim() в parseInt()
Ответ №2:
Вы могли бы использовать java.util.Scanner
. Предполагая, что ваши данные всегда отформатированы dd:dd
, вы могли бы сделать что-то вроде этого.
Scanner s = new Scanner(input).useDelimiter(":");
int n = s.nextInt();
if (n == 0 ) {
return "";
} else {
return Integer.toString(n)
}
Таким образом, вам не нужно сканировать строку дважды — один раз для разделения и один раз для проверки первого разделения. И, если ваши данные более сложные, вы можете сделать свой сканер более сложным, используя регулярные выражения или что-то в этом роде.