Как удалить начальные нули из алфавитно-цифрового текста?

Я видел вопросы о том, как снабдить префиксом нули здесь в ТАК. Но не другой путь!

Можете Вы парни предлагать меня, как удалить начальные нули в алфавитно-цифровом тексте? Есть ли какие-либо встроенные API, или я должен записать метод для обрезки начальных нулей?

Пример:

01234 converts to 1234
0001234a converts to 1234a
001234-a converts to 1234-a
101234 remains as 101234
2509398 remains as 2509398
123z remains as 123z
000002829839 converts to 2829839
204
задан Jonik 21 May 2012 в 23:31
поделиться

6 ответов

Regex - лучший инструмент для работы; каким оно должно быть, зависит от спецификации проблемы. Следующий код удаляет ведущие нули, но оставляет единицу, если необходимо (т.е. он не просто превращает «0» в пустую строку).

s.replaceFirst("^0+(?!$)", "")

Якорь ^ гарантирует, что сопоставленный 0+ находится в начале ввода. Отрицательный просмотр вперед (?! $) гарантирует, что не будет сопоставлена ​​вся строка.

Тестовая оснастка:

String[] in = {
    "01234",         // "[1234]"
    "0001234a",      // "[1234a]"
    "101234",        // "[101234]"
    "000002829839",  // "[2829839]"
    "0",             // "[0]"
    "0000000",       // "[0]"
    "0000009",       // "[9]"
    "000000z",       // "[z]"
    "000000.z",      // "[.z]"
};
for (String s : in) {
    System.out.println("[" + s.replaceFirst("^0+(?!$)", "") + "]");
}

См. Также

577
ответ дан 23 November 2019 в 04:52
поделиться

Вы можете заменить "^0*(.*)" на "$1" с помощью regex

0
ответ дан 23 November 2019 в 04:52
поделиться

Я думаю, что это так легко сделать. Вы можете просто перебирать строку с самого начала и удалять нули, пока не найдете ненулевой символ.

int lastLeadZeroIndex = 0;
for (int i = 0; i < str.length(); i++) {
  char c = str.charAt(i);
  if (c == '0') {
    lastLeadZeroIndex = i;
  } else {
    break;
  }
}

str = str.subString(lastLeadZeroIndex+1, str.length());
1
ответ дан 23 November 2019 в 04:52
поделиться

Используйте класс Apache Commons StringUtils :

StringUtils.strip(String str, String stripChars);
5
ответ дан 23 November 2019 в 04:52
поделиться

Как насчет способа регулярного выражения:

String s = "001234-a";
s = s.replaceFirst ("^0*", "");

^ привязки к началу строка (я предполагаю из контекста, что ваши строки здесь не многострочные, в противном случае вам может потребоваться поиск в \ A для начала ввода, а не для начала строки). 0 * означает ноль или более 0 символов (вы можете также использовать 0+ ). replaceFirst просто заменяет все эти 0 символы в начале ни на что.

И если, как и Вадим, ваше определение ведущих нулей не включает превращение «0» (или «000» или подобных строк) в пустую строку (рациональную достаточно ожидания), просто верните его, если необходимо:

String s = "00000000";
s = s.replaceFirst ("^0*", "");
if (s.isEmpty()) s = "0";
30
ответ дан 23 November 2019 в 04:52
поделиться

Чтобы пойти с ответом thelost Apache Commons: использование guava-библиотек (универсальная служебная библиотека Java от Google, которая, я бы сказал, теперь должна быть в пути к классам любого нетривиального проекта Java), это будет использовать CharMatcher :

CharMatcher.is('0').trimLeadingFrom(inputString);
13
ответ дан 23 November 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: