Bạn muốn chuyển đổi chuỗi ngẫu nhiên vào định danh Java hợp lệ. Theo the Java Language Specification, §3.8, định nghĩa về một định như sau:
Định danh:
IdentifierChars nhưng không phải là một từ khóa hoặc BooleanLiteral hoặc NullLiteral
IdentifierChars:
JavaLetter
IdentifierChars JavaLetterOrDigit
JavaLetter:
bất kỳ ký tự Unicode đó là một lá thư Java
JavaLetterOrDigit:
bất kỳ ký tự Unicode đó là một bức thư-hoặc chữ số Java
A bạn sẽ phải thực hiện, sau đó, đang thực hiện bước đầu vào của bạn và thay thế bất kỳ ký tự không hợp lệ nào bằng ký tự hợp lệ (ví dụ: gạch dưới) hoặc xóa hoàn toàn. Java thậm chí còn cung cấp các phương thức trong lớp Character
cho bạn biết nếu một ký tự cụ thể là JavaLetter hoặc JavaLetterOrDigit: isJavaIdentifierStart()
và isJavaIdentifierPart
. (Điều này dễ dàng hơn nhiều so với việc cố loại trừ các ký tự không hợp lệ vì tập hợp các ký tự hợp lệ nhỏ và tập hợp các ký tự không hợp lệ là rất lớn.)
Cuối cùng, hãy nhớ đảm bảo kết quả của bạn không bắt đầu bằng chữ số không phải với từ khóa hoặc chữ. Nếu xung đột là có thể và không mong muốn, bạn có thể nối thêm số vào kết quả của mình trên cơ sở cần thiết để có được các giá trị duy nhất.
Nội dung có thể có của chuỗi đầu vào là gì? Chỉ chữ và số, dấu chấm câu và dấu cách? Tất cả mọi thứ trong Unicode? – Pops
Không áp đặt các quy tắc về đầu vào, tôi nghĩ bạn sẽ tìm thấy các xung đột (tức là ánh xạ nhiều người). Tùy thuộc vào ứng dụng của bạn, điều này có thể hoặc có thể không quan trọng. – jpm
Bạn có thể thử lặp qua chuỗi và nối thêm vào một StringBuilder nếu nó là một ký tự hợp lệ cho một tên biến Java. Thách thức bạn có thể có là các biến trùng lặp, vì vậy bạn có thể muốn theo dõi những gì bạn đã sử dụng và nối thêm số nếu cần. – JustinKSU