簡體   English   中英

java將字符串轉換為int並刪除尾隨零

[英]java convert string to int and remove trailing zeros

大家好,我目前正在嘗試將字符串反向轉換為arrayList,然后刪除所有結尾的零,例如,“ 001203”先轉換為(3,0.2,1,0,0),然后轉換為(3,0,2,1)

我的代碼是當前

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();
            }
        }

    }

該代碼當前刪除所有0,而不是尾隨零。 意味着我的輸出是(3,2,1)而不是(3,0,2,1);

任何幫助將不勝感激謝謝

試試這個代碼:

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);
}

方法的問題在於,在內部循環中,無論其在列表中的位置如何,都將刪除零。

有多種方法可以實現您想要的。 這是一種使用單個循環的方法(沒有用於您的列表反向的String或Collections操作):

    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. 首先修剪所有前導零(例如,使用正則表達式操作或循環),然后向后循環以創建列表。

希望能有所幫助。

這是您近期要執行的操作的快速示例:

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])));
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM