簡體   English   中英

如何遍歷給定字符串中所有為 0 的字符?

[英]How can I loop through all the characters that are 0 in a given string?

我正在嘗試從 integer 中刪除尾隨零,這是我到目前為止的代碼。

import java.math.BigInteger;

public class newuhu {
    public static int numTrailingZeros(int s) {
        BigInteger J = BigInteger.valueOf(s);
        String sb = J.toString();
        String Y = "";
        while (sb.length() > 0 && sb.charAt(sb.length() - 1) == '0') {
            sb.replaceAll("0"," ");


        }
        return Integer.parseInt(Y);
    }

注意:我將我的 int 變成了 Biginteger,因為有人警告我某些輸入可能看起來像 20。 即 2.432902e+18

但是,我的 IntelliJ 調試工具告訴我變量 sb 不在循環中。 所以,我試圖了解必須做些什么來確保sb在循環中。

請理解,我是 Java 的初學者,所以,我正在嘗試學習新東西。

這里的問題是sb.replaceAll("0","")不會做任何事情。 您正在丟棄包含替換字符串的返回值。 這里

你可能想要的是這樣的:

while (sb.length() > 0 && sb.charAt(sb.length() - 1) == '0') {
    sb = sb.replaceAll("0"," ");

不過,我不確定您是否需要一個while循環。 ReplaceAll 將...用空格替換所有零。

replaceAll 用您想要的字符(即空格)替換所有出現的字符串,因此您根本不需要循環,而且您擔心溢出,因此您實際上應該使用 BigInteger 作為參數,而不是 int(int 不適合任何關閉到 20,)但是您的代碼還有另一個問題,您說要替換尾隨零,但現在您將用空白字符替換每個 0,您應該嘗試使用類似https://commons.apache.org/proper /commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html

public class newuhu {
public static int numTrailingZeros(BigInteger s) {
    String sb = s.toString();
    return Integer.parseInt(sb.replaceAll("0", "")); // consider returning something else if you're working with BigInteger
}

請記住,當執行BigInteger.valueOf(int)時不會產生影響,因為 int 的大數字永遠不會存儲在 int 中。 20.也適合int。

public static String trimTrailingZeros(String source) {
    for (int i = source.length() - 1; i > 0; ++i) {
        char c = source.charAt(i);
        if (c != '0') {
            return source.substring(0, i + 1);
        }
    }
    return ""; // or return "0";
}

或者,如果您喜歡 BigInteger。

public static BigInteger trimTrailingZeros(BigInteger num) {
    while (num.remainder(BigInteger.TEN).signum() == 0) {
        num = num.divide(BigInteger.TEN); 
    }
    return num;
}

這應該很快,因為您只創建一個字符串(通過substring )。

(第一:變量和字段應該以小寫字母開頭 - 當沒有常量時。)

它應該是

sb = sb.replaceAll(...)

因為sb沒有被replaceAll改變,所以只返回被替換的值。 class 字符串提供了不可變的值,這些值始終保持不變,因此您可以將變量分配給變量,並且更改任一變量的值將永遠不會影響另一個 - 不會進一步共享。

那么它應該是:

sb = sb.replaceFirst("0$", "");

replaceAll將替換每個 0,例如“23043500”到“23435”。

replaceFirst$末尾替換 _regular 表達式:char '0'。

輸入數字上的溢出是不可能的,因為您已經傳遞了一個int

public static int numTrailingZeros(int n) {
    while (n != 0 && n % 10 == 0) {
        n /= 10;
    }
    return n;
}

public static int numTrailingZeros(String n) {
    n = n.replaceAll("0+", "");
    if (n.isEmpty() || n.equals("-")) { // "-0" for pessimists?
       n = "0";
    }
    return Integer.parseInt(n);
}

%是模運算符,integer 除法的余數 147 % 10 == 7。

該名稱具有誤導性,或者您正在計算不同的東西。

public static int numTrailingZeros(int n) {
    int trailingZeros = 0;
    while (n != 0 && n % 10 == 0) {
        n /= 10;
        ++trailingZeros ;
    }
    return trailingZeros ;
}

暫無
暫無

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

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