2017-02-21 27 views
1

Я пытаюсь удалить все начальные ноль из номера части строки. Я придумал этот код (ниже). Из данного примера это сработало. Но когда я добавляю «0» в начале, он не даст правильного вывода. Кто-нибудь знает, как добиться этого? Заранее спасибоУдалите все начальные ноль из номера части строки

вход: (2016) abc00701def00019z -> выход: (2016) abc701def19z -> resut: правильно

вход: 0 (2016) abc00701def00019z -> выход: (2016) abc71def19z -> результат: неправильно -> ожидаемый выход: (2016) abc701def19z

EDIT: Строка может содержать не английский алфавит.

String localReference = "(2016)abc00701def00019z"; 
String localReference1 = localReference.replaceAll("[^0-9]+", " "); 
List<String> lists = Arrays.asList(localReference1.trim().split(" ")); 
System.out.println(lists.toString()); 
String[] replacedString = new String[5]; 
String[] searchedString = new String[5]; 
int counter = 0; 
for (String list : lists) { 
    String s = CharMatcher.is('0').trimLeadingFrom(list); 
    replacedString[counter] = s; 
    searchedString[counter++] = list; 

    System.out.println(String.format("Search: %s, replace: %s", list,s)); 
} 
System.out.println(StringUtils.replaceEach(localReference, searchedString, replacedString)); 
+0

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

+0

@XtremeBaumer Но это не получится для очень больших числовых последовательностей, которые слишком велики для int, чтобы удерживать – Sentry

+0

@ Sentry не уверен, но, возможно, BigInteger также удаляет ведущие нули. и я сомневаюсь, что у вас будет строка, содержащая число для перегрузки bigInteger – XtremeBaumer

ответ

2
str.replaceAll("(^|[^0-9])0+", "$1"); 

Это удаляет строку из нулей после не-цифровых символов, и в начале строки.

+0

Greate. Это сработало. большое спасибо –

0

Java имеет \ P {альфа} +, который соответствует любому не-алфавитный символ, а затем удаляет исходный Зеро.

String stringToSearch = "0(2016)abc00701def00019z"; 
Pattern p1 = Pattern.compile("\\P{Alpha}+"); 
Matcher m = p1.matcher(stringToSearch); 
StringBuffer sb = new StringBuffer(); 
while(m.find()){ 
    m.appendReplacement(sb,m.group().replaceAll("\\b0+","")); 
} 
m.appendTail(sb); 
System.out.println(sb.toString()); 

output: 

(2016)abc701def19z 
+0

Спасибо за ваш ответ. Но это произойдет, если строка содержит не английский алфавит. –

0

Я попытался выполнить задачу с помощью Regex и смог выполнить требуемое в соответствии с двумя тестовыми примерами, которые вы дали. Также $ 1 и $ 2 в приведенном ниже коде являются частями в скобках() в предыдущем Regex.

Вы можете найти код ниже:

public class Demo { 

     public static void main(String[] args) { 

      String str = "0(2016)abc00701def00019z"; 

/*Below line replaces all 0's which come after any a-z or A-Z and which have any number after them from 1-9. */ 
      str = str.replaceAll("([a-zA-Z]+)0+([1-9]+)", "$1$2"); 
      //Below line only replace the 0's coming in the start of the string 
      str = str.replaceAll("^0+",""); 
      System.out.println(str); 
     } 
    } 
+0

Спасибо за ваш ответ. Но это произойдет, если строка содержит не английский алфавит. –

+0

Какие у вас другие элементы? – Mohit

+0

У меня также есть китайский символ вместо английского –