Как убрать начальные нули из буквенно-цифрового текста? - PullRequest
194 голосов
/ 10 мая 2010

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

Не могли бы вы, ребята, подсказать, как убрать начальные нули в буквенно-цифровом тексте? Существуют ли какие-либо встроенные 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

Ответы [ 18 ]

1 голос
/ 19 мая 2017

Если вам (как и мне) нужно удалить все начальные нули из каждого «слова» в строке, вы можете изменить ответ @polygenelubricants следующим образом:

String s = "003 d0g 00ss 00 0 00";
s.replaceAll("\\b0+(?!\\b)", "");

, что приводит к:

3 d0g ss 0 0 0
1 голос
/ 10 мая 2010

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

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());
0 голосов
/ 04 марта 2016

А как насчет простого поиска первого ненулевого символа?

[1-9]\d+

Это регулярное выражение находит первую цифру от 1 до 9, за которой следует любое количество цифр, поэтому для "00012345" возвращается "12345" . Его можно легко адаптировать к буквенно-цифровым строкам.

0 голосов
/ 18 февраля 2016

Я провел несколько тестов производительности и обнаружил, что самое быстрое (на сегодняшний день) решение - это:

    private static String removeLeadingZeros(String s) {
      try {
          Integer intVal = Integer.parseInt(s);
          s = intVal.toString();
      } catch (Exception ex) {
          // whatever
      }
      return s;
    }

Особенно регулярные выражения очень медленные в длинной итерации. (Мне нужно было найти самый быстрый способ для пакетной работы.)

0 голосов
/ 05 ноября 2015

Если вы не хотите использовать регулярные выражения или внешнюю библиотеку. Вы можете сделать с "для":

String input="0000008008451"
String output = input.trim();
for( ;output.length() > 1 && output.charAt(0) == '0'; output = output.substring(1));

System.out.println(output);//8008451
0 голосов
/ 01 октября 2017

Без использования функции Regex или substring() для String, которая будет неэффективна -

public static String removeZero(String str){
        StringBuffer sb = new StringBuffer(str);
        while (sb.length()>1 && sb.charAt(0) == '0')
            sb.deleteCharAt(0);
        return sb.toString();  // return in String
    }
0 голосов
/ 23 января 2013
       String s="0000000000046457657772752256266542=56256010000085100000";      
    String removeString="";

    for(int i =0;i<s.length();i++){
      if(s.charAt(i)=='0')
        removeString=removeString+"0";
      else 
        break;
    }

    System.out.println("original string - "+s);

    System.out.println("after removing 0's -"+s.replaceFirst(removeString,""));
0 голосов
/ 10 мая 2010

Вы можете заменить "^0*(.*)" на "$1" на регулярное выражение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...