2014-08-28 29 views
9

Bir dize değerinde sondaki sıfırları nasıl silebilirim ve ondalık noktadan sonra dize yalnızca sıfırlar içeriyorsa ondalık noktayı kaldırırım? Ben aşağıdaki kodu kullanıyorum:Bir dize değeri içinde izleyen sıfırı kaldırma ve ondalık noktasını kaldırma

String string1 = Double.valueOf(a).toString() 

Bu (10.10 ve 10.2270) içinde ardarda sıfırları kaldırır, ancak ben 1. ve 2. girişler için benim beklenen sonuç alamadım.

Girdi

10.0 
10.00 
10.10 
10.2270 

Beklenen çıkış

10 
10 
10.1 
10.227 
+0

BigDecimal –

+0

iyi bahis önerilen kopya @ScaryWombat bu gereksinimi – vikeng21

+0

için normal ifade, girdi olarak bir 'double' sahiptir kullanılarak deneyin . Bu sorunun bir 'String' vardır. – jdphenix

cevap

-1

böyle regex deneyin

DecimalFormat decimalFormat = new DecimalFormat("#.##"); 
String string1 = decimalFormat.format(10.000); 
+2

Bu, 2. mantissa basamağının ötesindeki herhangi bir şeyi kaldıracaktır. – jdphenix

-3

deneyin:

public static void main(String[] args) { 
    String s = "10.0"; 
    System.out.println(s.replaceAll("[0]+$", "").replaceAll("(\\.)(?!.*?[1-9]+)", "")); 

} 

O/P: 
10 

input :String s = "10.0750"; 
O/P : 10.075 

input : String s = "10.2750"; 
O/P : 10.275 
+1

Reddedilmeyi umursamıyorum. Ama bilmek istiyorum ** neden **? – TheLostMind

+0

DV değil, ama birisi dediği gibi "Her lokasyonda çalışmayabilir. Bazıları ondalık noktasını grup ayırıcı olarak kullanırlar" –

7

Java kitaplığı, bunun için bunu yapabilen dahili sınıfına sahiptir. BigDecimal. İşte

bir örnek kullanım şöyledir:

BigDecimal number = new BigDecimal("10.2270"); 
System.out.println(number.stripTrailingZeros().toPlainString()); 

Çıktı:

10.227 

Not: Bu bir String alır BigDecimal yapıcı kullanmak önemlidir. Muhtemelen double numaralı telefonu istemezsiniz.


İşte Collection<String> alıp sarılı sondaki kaldırıldı sıfır, hediye ile diğer numaralar Collection<String> dönecektir bir yöntem.

public static Collection<String> stripZeros(Collection<String> numbers) { 
    if (numbers == null) { 
     throw new NullPointerException("numbers is null"); 
    } 

    ArrayList<String> value = new ArrayList<>(); 

    for (String number : numbers) { 
     value.add(new BigDecimal(number).stripTrailingZeros().toPlainString()); 
    } 

    return Collections.unmodifiableList(value); 
} 

Örnek kullanım:

ArrayList<String> input = new ArrayList<String>() {{ 
    add("10.0"); add("10.00"); add("10.10"); add("10.2270"); 
}}; 

Collection<String> output = stripZeros(input); 
System.out.println(output); 

Çıkışlar:

[10, 10, 10.1, 10.227] 
+0

hiç bu kadar havalı olmazlar +1 –

+1

"stripTrailingZeros()' u da "toPlainString" ile çağırdı() ', spesifikasyonlarınızın dışındaki çıktılarda sonuçlanır. Cevabımı düzelttim. – jdphenix

+0

Ben teknik açıdan doğru değil, benim için yararlı değil ise lol –