Tôi đang tạo một ứng dụng dựa trên web và tôi có các trường văn bản trong đó các giá trị được lưu trữ dưới dạng Chuỗi. Vấn đề là một số trường văn bản sẽ được phân tích cú pháp thành int và bạn có thể lưu trữ số lớn hơn nhiều trong các chuỗi hơn là bạn có thể trong một int. Câu hỏi của tôi là, cách tốt nhất để đảm bảo rằng số chuỗi có thể được phân tích cú pháp thành một int mà không bị lỗi.Cách tốt nhất để đảm bảo chuỗi có thể được lưu trữ dưới dạng int trong java
Trả lời
Bạn có thể sử dụng cấu trúc try/catch cho điều đó.
try {
Integer.parseInt(yourString);
//new BigInteger(yourString);
//Use the above if parsing amounts beyond the range of an Integer.
} catch (NumberFormatException e) {
/* Fix the problem */
}
cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn. đã làm được điều đó. – user1423793
Bạn có thể chạy một kiểm tra trong mã của bạn:
- Chuyển đổi String thành một dài.
- So sánh giá trị dài so với giá trị lớn nhất của một số nguyên (một hằng số trong lớp Integer.)
- Nếu dài lớn hơn, bạn biết rằng nó không thể được phân tích cú pháp thành int mà không tràn.
- Nếu nó nhỏ hơn hoặc bằng, hãy chuyển đổi dài của bạn thành một int.
Tại sao không chỉ chuyển đổi nó thẳng thành một int? – luketorjussen
Bởi vì tôi ngớ ngẩn, rõ ràng. (Sẽ không phải là int có thể tràn vào một giá trị tiêu cực, hoặc thất bại? Nó sẽ yêu cầu một khối try/catch, mà phải thừa nhận là câu trả lời tốt hơn.) – BlackVegetable
Luôn phân tích chuỗi trong khối try catch
vì vậy nếu có bất kỳ ngoại lệ hoặc lỗi nào xảy ra, bạn biết rằng có một số lỗi trong chuỗi để phân tích cú pháp.
Phương pháp Integer.parseInt kiểm tra phạm vi như là explicited bởi javadoc:
An exception of type NumberFormatException is thrown if any of the following situations occurs:
The first argument is null or is a string of length zero.
The radix is either smaller than Character.MIN_RADIX or larger than Character.MAX_RADIX.
Any character of the string is not a digit of the specified radix, except that the first character may be a minus sign '-' ('\u002D') provided that the string is longer than length 1.
The value represented by the string is not a value of type int.
Examples:
parseInt("0", 10) returns 0
parseInt("473", 10) returns 473
parseInt("-0", 10) returns 0
parseInt("-FF", 16) returns -255
parseInt("1100110", 2) returns 102
parseInt("2147483647", 10) returns 2147483647
parseInt("-2147483648", 10) returns -2147483648
parseInt("2147483648", 10) throws a NumberFormatException
parseInt("99", 8) throws a NumberFormatException
parseInt("Kona", 10) throws a NumberFormatException
parseInt("Kona", 27) returns 411787
Vì vậy, một cách chính xác là cố gắng phân tích các chuỗi:
try {
Integer.parseInt(str);
} catch (NumberFormatException e) {
// not an int
}
cảm ơn bạn. Tuy nhiên, điều đó đã làm việc – user1423793
Phân tích các chuỗi để một BigInteger thay vì một Integer thông thường. Điều này có thể giữ giá trị cao hơn nhiều.
BigInteger theInteger = new BigInteger(stringToBeParsed);
Điều đó dường như không trả lời được câu hỏi. –
+1 Tôi nghĩ rằng đây là những gì OP đang tìm kiếm. –
@dystroy. Thực ra tôi nghĩ là vậy. Cách tôi đọc câu hỏi là anh ta muốn người dùng có thể nhập bất kỳ số nào, nhưng không muốn chương trình bị sập do số lượng ong lớn –
Bạn có thể sử dụng Apache Commons Lang.
import org.apache.commons.lang.math.NumberUtils;
NumberUtils.toInt("", 10); // returns 10
NumberUtils.toInt(null, 10); // returns 10
NumberUtils.toInt("1", 0); // returns 1
Số thứ hai là mặc định nếu Chuỗi không phải là giá trị số. Tham số đầu tiên là Chuỗi bạn đang cố gắng chuyển đổi.
Đối với một số lượng lớn tôi sẽ làm như sau
BigInteger val = null;
try {
val = new BigInteger("1");
} catch (NumberFormatException e) {
val = BigInteger.ZERO;
}
Bạn cũng có thể sử dụng Long? – mrswadge
gì về điều này?
BigInteger bigInt = BigInteger(numberAsString);
boolean fitsInInt = (bigInt.compareTo(BigInteger.valueOf(bigInt.intValue())) == 0;
- 1. Cách tốt nhất để lưu trữ dữ liệu cột dưới dạng hàng MS SQL
- 2. Định dạng IPv6 dưới dạng int trong C# và lưu trữ nó trong SQL Server
- 3. Cách tốt nhất để lưu trữ các chuỗi dài
- 4. java: lưu chuỗi dưới dạng file gzip
- 5. Tôi có thể lưu trữ enums dưới dạng chuỗi trong EF 5 không?
- 6. Java: Cách tốt nhất để chuyển int bằng tham chiếu
- 7. Cách dễ nhất trong tập lệnh trình bao để đảm bảo nó không chạy dưới dạng gốc?
- 8. Thực tập chuỗi Java, điều gì được đảm bảo?
- 9. Các ngày có thể được lưu trữ dưới dạng chuỗi/văn bản được so sánh trực tiếp?
- 10. cách tốt nhất có thể để muối và lưu trữ muối là gì?
- 11. Các chuỗi ký tự chuỗi có đảm bảo được đặt cạnh nhau trong bộ nhớ không?
- 12. Có thể lưu trữ int trong Python dưới 12 byte không?
- 13. Java: Làm thế nào để nạp Class được lưu trữ dưới dạng byte [] vào JVM?
- 14. Có tốt hơn khi lưu trữ giá trị dưới dạng biến hoặc gọi lại không?
- 15. cách tốt nhất để lưu trữ thư trong DB (postfix)
- 16. JavaScript: lưu chuỗi base64 dưới dạng tệp
- 17. Cách tốt để lưu trữ các số nguyên duy nhất
- 18. Cách tốt nhất để lưu trữ và truy cập 120.000 từ trong java
- 19. Phát tệp MP3 được lưu trữ dưới dạng blob
- 20. Thực thi mã được lưu trữ dưới dạng danh sách
- 21. cách lưu trữ NSDictionary dưới dạng thuộc tính có thể biến đổi trong dữ liệu lõi
- 22. Làm thế nào để lưu trữ uuid dưới dạng số?
- 23. Cách tốt nhất để lưu trữ chuỗi kết nối trong .NET DLLs là gì?
- 24. thực hành tốt nhất: cách lưu trữ mã phía máy chủ trong kho lưu trữ maven
- 25. Cách tốt nhất để lưu trữ các hằng số được tham chiếu trong DB?
- 26. Cách tốt nhất để lưu trữ mã quốc gia, tên, và Continent trong Java
- 27. Đường ray: Đá quý có được bảo đảm không?
- 28. Mongo chuyển đổi tất cả các trường số được lưu trữ dưới dạng chuỗi
- 29. Toán tử MongoDB $ gt/$ lt với giá được lưu trữ dưới dạng chuỗi
- 30. Thực hành tốt nhất để lưu trữ cài đặt
Xác thực đầu vào bằng cách phân tích bằng 'Integer.parseInt (...)' trong 'try/catch (NumberFormatException e)'. –
Số của bạn lớn đến mức nào? Là số của bạn nó ra khỏi phạm vi của các loại có sẵn trong java (Double/Float)? – Santosh
@HovercraftFullOfEels Tôi không nghĩ rằng OP đang nói về 'NumberFormatException'. Tôi nghĩ là về 'Chuỗi' khi được chuyển thành một số (' Số nguyên'), có thể nằm ngoài phạm vi. –