2014-08-28 22 views
9

Làm cách nào để loại bỏ các số 0 trong một giá trị Chuỗi và loại bỏ dấu thập phân nếu chuỗi chỉ chứa số không sau dấu thập phân? Tôi đang sử dụng mã bên dưới:Làm thế nào để loại bỏ dấu 0 ở một giá trị Chuỗi và loại bỏ dấu thập phân

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

này loại bỏ trailing zeros trong (10.10 và 10,2270), nhưng tôi không nhận được kết quả mong đợi của tôi cho 1 và đầu vào thứ 2.

Input

10.0 
10.00 
10.10 
10.2270 

Dự kiến ​​sản lượng

10 
10 
10.1 
10.227 
+0

hãy thử sử dụng BigDecimal –

+0

đặt cược tốt nhất là regex cho yêu cầu đó – vikeng21

+0

@ScaryWombat đề xuất trùng lặp có một 'double' như đầu vào . Câu hỏi này có một 'Chuỗi'. – jdphenix

Trả lời

-1

Hãy thử

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

Điều này sẽ loại bỏ bất cứ điều gì vượt ra ngoài chữ số thứ hai mantissa. – jdphenix

-3

Hãy thử regex như thế này:

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

Tôi không nhớ bị downvoted. Nhưng tôi muốn biết ** tại sao **? – TheLostMind

+0

không phải là DV, nhưng khi người khác nói "Có thể không hoạt động ở mọi miền địa phương. Một số sử dụng dấu thập phân làm phân cách nhóm" –

7

Thư viện Java có một lớp được xây dựng trong lớp có thể làm điều này cho nó. Đó là BigDecimal.

Đây là một cách sử dụng ví dụ:

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

Output:

10.227 

Lưu ý: Điều quan trọng là sử dụng các nhà xây dựng BigDecimal mà phải mất một String. Có thể bạn không muốn một người mất double.


Dưới đây là một phương pháp mà sẽ mất một Collection<String> và trở về khác Collection<String> số với trailing số không lấy ra, gói quà tặng.

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

sử dụng Ví dụ:

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

Đầu ra:

[10, 10, 10.1, 10.227] 
+0

không có cách nào để làm mát +1 –

+1

Tôi phát hiện ra 'stripTrailingZeros()' cũng có cuộc gọi đến 'toPlainString() 'kết quả đầu ra nằm ngoài thông số của bạn. Tôi đã sửa chữa câu trả lời của mình. – jdphenix

+0

Tôi đã không đặt câu hỏi lol –

Các vấn đề liên quan