Đây có phải là cách chính xác để chuyển đổi một char thành Chuỗi trong Java? [bản sao]


20

Trong khi viết đơn vị kiểm tra cho một hàm trả về booleanmất hai Stringgiây và tôi cần kiểm tra từng ký tự của bảng chữ cái ( 'a'- 'z') theo một trong các tham số, từng cái một, vì vậy tôi đã viết điều này để làm điều đó:

for(char c = 'a'; c <= 'z'; c++)
{
    assertTrue(MyClass.MyFunction(testSubject, new String(c));
} 

Tôi đã có thể nghĩ rằng điều này được cho phép, nhưng nó không phải, vì vậy tôi chỉ làm điều đó như thế này:

for(char c = 'a'; c <= 'z'; c++)
{
    assertTrue(MyClass.MyFunction(testSubject, ((Character) c).toString());
} 

Đây có phải là một phương pháp đáng tin cậy để chuyển đổi charmột Stringtrong Java? Đó có phải là cách ưa thích? Tôi không biết nhiều về Java vì vậy tôi muốn làm rõ về điều này.


2
Không trực tiếp đến câu hỏi của bạn, nhưng tôi sẽIntStream.range(0, 26).mapToObj(i -> Character.toString((char) ('a' + i))).forEach(x -> assertTrue(MyClass.MyFunction(testSubject, x)));
Elliott Frisch

3
@ElliottFrisch nhưng tại sao? Luồng là không cần thiết ở đây, nhưng ngay cả khi bạn khăng khăng sử dụng luồng cho mỗi vòng lặp, tại sao ít nhất IntStream.rangeClosed('a', 'z')không sử dụng ?
PhilipRoman

1
Không có cách "chính xác" nào. Có lẽ có ít nhất năm cách để làm điều này: mà bạn chọn phụ thuộc vào thời trang nhiều như thực tế khoa học. Hầu hết thời gian nó không quan trọng, và một chương trình thử nghiệm chắc chắn là một trong những trường hợp đó.
dùng207421

@PhilipRoman Vì nó ở đó (Edmund Hillary). Vì tôi có thể. Bởi vì chúng tôi muốn (Billie Piper, tôi nghĩ vậy). Đó cũng là một cách tiếp cận tuyệt vời.
Elliott Frisch

Tôi có thể nghĩ rằng điều này được cho phép Bạn nghĩ rằng nó được phép gọi một nhà Stringxây dựng không tồn tại? Sửa lỗi cho tôi nếu tôi sai, nhưng theo như tôi biết, không có hàm tạo nào trong lớp Stringcó một charđối số duy nhất . Lưu ý rằng charkhông giống như char[].
Abra

Câu trả lời:


33

Giải pháp ngắn nhất:

char c = 'a';
String s = "" + c;

Các giải pháp sạch nhất (và có thể hiệu quả nhất 1 ):

char c = 'a';

String s1 = String.valueOf(c);
// or
String s2 = Character.toString(c);

So với cách tiếp cận của bạn, cách trên ngăn chặn việc phải đóng hộp nguyên thủy vào một Charactervật thể.


1 Sự kém hiệu quả của nối chuỗi trong cách tiếp cận đầu tiên có thể được tối ưu hóa bởi trình biên dịch hoặc thời gian chạy, do đó, một (nếu nghiêng như vậy) sẽ thực sự phải chạy một điểm chuẩn vi mô để xác định hiệu suất thực tế. Tối ưu hóa vi mô như thế này hiếm khi đáng nỗ lực, và dựa vào sự kết hợp để buộc chuyển đổi chuỗi chỉ trông không đẹp lắm.


6
Lần trước tôi đã xem, javactrình biên dịch của Sun tự động chuyển String s = "" + c;thành String s = String.valueOf(c);, vì vậy hiệu suất sẽ như nhau.
Neil

4
@Neil Whew! Tôi đã bắt đầu nghĩ rằng kiểu người mà tôi đã viết chú thích đó không còn tồn tại trên Stack Overflow :)
Robby Cornelissen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.