[英]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.