2015-05-22 2 views
0

Привет всем Я в настоящее время пытаюсь преобразовать строку в массивList в обратном порядке, а затем удалить любые завершающие нули например, «001203» преобразует в (3,0,2,1,0,0)), а затем (3,0,2,1)java преобразовать строку в int и удалить завершающие нули

мой код в настоящее время

public convert(String nums) { 
    List = new ArrayList<Integer>(); // create arraylist 

    for (int i = nums.length(); i >= 0; i--) { //convert to int 
     int j = Integer.parseInt(digits); 
     List .add(j); 

     for (Iterator<Integer> k = List .iterator(); k.hasNext();) { //remove trailing zeros 
      if (k.next().equals(0)) { 
       k.remove(); 
      } 
     } 

    } 

Этот код в настоящее время удаляет все 0s вместо замыкающих нулей. что мой выход равен (3,2,1) вместо (3,0,2,1);

любая помощь будет оценена заранее спасибо

+2

Начните свою итерацию в конце вашего массива. Удалите нули до тех пор, пока не будет найдено ненулевое значение, после чего вы должны «разбить» цикл – CubeJockey

+1

. Как преобразовать «001203» в «3, 0.2 ?, 1, 0, 0' - это опечатка? – gtgaxiola

+0

Попробуйте написать метод, который будет обрезать нули следующим образом: Найти сначала не 0, это начало новой строки, а второе значение - последний символ не 0, после этого вы можете использовать String.subString (начало, конец) ;) Таким образом, вы обеспечите правильное возвращение. Ваш путь удаляет каждые 0 из строки. – Fincio

ответ

1

Проблема с вашего метода является то, что, в вашем внутреннем цикле вы удаляете нули независимо от его позиции в списке.

Существует несколько способов достижения желаемого. Вот один метод с использованием одного цикла (без операций Струнных или коллекций, которые меняют свой список для вас):

String nums = "001203"; 

    List<Integer> list = new ArrayList<>(); 

    // a boolean flag to help check for leading zeroes 
    // set it to true first i.e. assume there are leading zeroes 
    boolean checkLeadingZeroes = true; 

    // Ignore leading zeroes during iteration, 
    // and append to list in reverse order 

    for (int i=0; i < nums.length(); i++){ 
     int n = Integer.parseInt(nums.charAt(i)+""); 

     // only check for leading zeroes if flag is true 

     if (checkLeadingZeroes){ 
      // If flag is set to false here, you've found the first non-zero 

      checkLeadingZeroes = (n == 0); 
     } 

     if (!checkLeadingZeroes) { 
      /* If flag is false, n is not a leading zero 
      * Add n to the beginning of your list (index 0) 
      */ 
      list.add(0, n); 
     } 
    } 

несколько других вариантов:

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

  2. Сначала обрезайте все начальные нули (например, с помощью операции регулярного выражения или цикл), затем создайте свой список назад.

Надеюсь, что это поможет.

0

Вот краткий пример того, что вы хотите сделать в ближайшее время:

String example = "001203"; 
// Replacing all leading 0s with empty, converting to char array 
char[] chars = example.replaceAll("^0+", "").toCharArray(); 
// creating list of integers 
List<Integer> list = new ArrayList<Integer>(); 
// iterating chars 
for (char c: chars) { 
    // trying to convert to integer 
    try { 
     list.add(Integer.parseInt(Character.toString(c))); 
    } 
    catch (NumberFormatException nfe) { 
     // TODO handle non-numeric characters! 
    } 
} 
// reversing list 
Collections.reverse(list); 
// printing list 
System.out.println(list); 

Выходной

[3, 0, 2, 1] 

Примечание

Другой вариант, без использования Collections.reverse, чтобы начать итерации в конце вашего char[]:

for (int i = chars.length - 1; i > -1; i--) { 
    try { 
     list.add(Integer.parseInt(Character.toString(chars[i]))); 
... 
0

Попробуйте этот код:

public static void main(String[] args) { 
    String numStr = "001203"; 
    String revNumStr = new StringBuilder(numStr).reverse().toString(); 

    int lastZeroIndex = revNumStr.lastIndexOf('0'); 
    if(lastZeroIndex == revNumStr.length() - 1) { 
     String newStr = ""; 
     boolean done = false; 
     for(int i = (revNumStr.length() - 1) ; i >= 0 ; i --) { 

      if(revNumStr.charAt(i) != '0') { 
       done = true; 
      } 

      if(done) { 
       newStr += revNumStr.charAt(i); 
      } 
     } 

     revNumStr = new StringBuilder(newStr).reverse().toString(); 
    } 

    System.out.println("The revrese string is : " + revNumStr); 
} 
Смежные вопросы