2010-08-24 30 views
9

Tôi có một chuỗi, nói "600sp" mà từ đó tôi muốn lấy phần nguyên (600).Cách tốt nhất để lấy phần nguyên của chuỗi "600sp"?

Nếu tôi làm Integer.valueOf("600sp") Tôi nhận được ngoại lệ do giá trị không phải là số "s" được gặp trong chuỗi.

Cách nhanh nhất sạch nhất để lấy phần nguyên là gì?

Cảm ơn!

+2

Phần số được đảm bảo xuất hiện trước? nó luôn luôn là một số có ba chữ số? –

+0

Yeah nó luôn luôn là một số chiều dài thay đổi theo sau là sp. –

Trả lời

13

Nếu định dạng chuỗi của bạn sẽ luôn luôn là số tiếp theo một số nhân vật, sau đó thử này

mystr.split("[a-z]")[0] 
+0

ngắn và ngọt ngào, hoàn hảo - cảm ơn bạn. –

+0

giải pháp tuyệt vời! – stratwine

+0

điều này sẽ sụp đổ nếu được cung cấp một chuỗi rỗng và có thể tạo ra các kết quả không hợp lệ nếu được cung cấp một chuỗi ký tự quốc tế – Jherico

1

Bạn có thể sử dụng

Integer.valueOf("0" + "600sp".replaceAll("(\\d*).*", "$1")) 

Lưu ý:

Với regex này, bạn sẽ giữ cho chỉ số ban đầu.


Edit: Các "0" + được sử dụng để không sụp đổ khi tôi không có chữ số. Tks @jherico!

+0

Điều này sẽ sụp đổ nếu chuỗi không chứa chữ số. – Jherico

+0

@jherico: tks! Tôi sẽ sửa chữa. – Topera

6

Tùy thuộc vào các ràng buộc của đầu vào của bạn, bạn có thể tốt nhất với regex.

Pattern p = Pattern.compile("(\\d+)"); 
    Matcher m = p.matcher("600sp"); 
    Integer j = null; 
    if (m.find()) { 
     j = Integer.valueOf(m.group(1)); 
    } 

biểu thức chính quy này dịch là 'cho tôi tập hợp các chữ liền kề ở phần đầu của chuỗi, nơi có ít nhất 1 chữ số. Nếu bạn có các ràng buộc khác như phân tích cú pháp số thực như trái ngược với số nguyên, thì bạn cần sửa đổi mã.

2

Để có giải pháp ngắn hơn và ít cụ thể hơn, hãy thêm ngữ cảnh khác.

StringBuffer numbers = new StringBuffer(); 
for(char c : "asdf600sp".toCharArray()) 
{ 
    if(Character.isDigit(c)) numbers.append(c); 
} 

System.out.println(numbers.toString()); 

Trong ánh sáng của các thông tin mới, một giải pháp cải thiện:

Integer.valueOf("600sp".replace("sp","")); 
1

Nếu chuỗi được đảm bảo (như bạn nói nó) là một số nguyên theo sau là "sp", tôi sẽ khuyên bạn không nên sử dụng trình phân tích biểu thức chính quy chung hơn, cũng sẽ chấp nhận các biến thể khác (cần phải reje cted là lỗi).

Chỉ cần kiểm tra nếu nó kết thúc bằng "sp", sau đó phân tích cú pháp chuỗi con mà không có hai ký tự cuối cùng.

+0

Đây là một điểm rất tốt. Cảm ơn Thilo. –

2

Tôi biết rằng điều này đã được trả lời, nhưng bạn đã xem xét java.util.Scanner chưa? Nó có vẻ phù hợp với hóa đơn hoàn hảo mà không có các tiện ích chuỗi phức tạp của regex.

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