2012-06-14 31 views
7

Đây là câu hỏi đầu tiên của tôi về Stackoverflow, vì vậy hãy chịu với tôi nếu bạn tìm thấy bất kỳ điều gì vô nghĩa trong bài đăng đầu tiên của tôi. FYI rằng tôi đã trải qua các câu hỏi thường gặp SO và tôi biết các chính sách khác nhau của nó. Bạn thấy đấy, tôi là một người đã làm việc rất nhiều với các ngôn ngữ như PHP, Perl, Python, ROR và gần đây tôi đã "chuyển ngữ cảnh" sang Java EE. Bạn thấy đấy, một số trong những ngôn ngữ mà tôi đã làm việc trên có một cấu trúc mà giúp tôi một cách đệ quy đổ nội dung của một cấu trúc tổng hợp mà không có một cho/foreach/for..in vòng lặpĐệ quy đổ nội dung của một cấu trúc tổng hợp (Bộ sưu tập, Mảng) trong Java

Ví dụ,

a = Any composite Data structure

PHP có

var_dump() and print_r()

Perl có

Data::Dumper

ROR có

PrettyPrint

và Python có

pprint module
.

Vì vậy, câu hỏi của tôi đi,

Có tương đương với bất kỳ điều nào trong số này trong vũ trụ Java không? Tôi thấy nó rất thuận tiện khi tôi sử dụng bất kỳ ngôn ngữ nào (PHP/Perl/Python/ROR) để kết xuất nội dung của một cấu trúc dữ liệu tổng hợp để kiểm tra nó như thế nào và sau đó xử lý nó hơn nữa (hoặc quyết định cách xử lý thêm)

Cảm ơn bạn đã dành thời gian và lời xin lỗi nếu bài đăng của tôi xem bất kỳ quy tắc SO nào.

+2

1) Chào mừng bạn đến với SO. 2) Liên quan đến nghi thức SO của bạn, điều duy nhất bạn đã làm sai là phải đề cập rất nhiều về việc mới trở thành SO. Hãy trực tiếp và đúng với câu hỏi của bạn - khi người khác tìm kiếm cùng một chủ đề, họ không quan tâm đến câu chuyện cuộc sống của bạn. :-) –

+0

Ok, Greg. Cảm ơn bạn :) –

Trả lời

1

Các java.util bộ sưu tập có toString() rằng đệ quy sẽ đổ ra các chi tiết của danh sách/thiết/đồ vv Điều này đòi hỏi đối tượng được lưu trữ trong bộ sưu tập đã xác định được toString() s.Tuy nhiên,

Tuy nhiên, tính năng này bị hỏng đối với mảng vì Java không có mặc định hữu ích toString() cho một mảng. Nếu bạn biết bạn đang xử lý một mảng, thì bạn có thể sử dụng phương thức tiện ích Arrays.deepToString() (xem guido's response để biết thêm chi tiết).

Ví dụ, mã này:

final Map<String, Object> map = new HashMap<String, Object>(); 
final List<String> nested = Arrays.asList("foo", "bar", "baz"); 

map.put("given", "Arthur"); 
map.put("family", "Dent"); 
map.put("nested", nested); 

System.out.println(map); 

Tạo này:

{nested=[foo, bar, baz], given=Arthur, family=Dent} 
+0

Ok, khoản tiền này sẽ trả lời câu trả lời của bạn và câu trả lời ở trên. Không chắc chắn về cái nào tôi nên kiểm tra màu xanh lá cây :) Cảm ơn rất nhiều vì đã trả lời. –

0

Bạn có thể sử dụng phương pháp tĩnh tiện ích tìm thấy trong java.util.Arrays lớp:

public static String toString(Object[] a) 
ie: String dump = Arrays.toString(array); 

Trả về một chuỗi đại diện của các nội dung của mảng được chỉ định.

Nếu mảng chứa các mảng khác dưới dạng phần tử, chúng được chuyển thành chuỗi bằng phương thức Object.toString() được kế thừa từ Object, mô tả danh tính của chúng hơn là nội dung của chúng.

Giá trị trả về bằng phương pháp này bằng giá trị sẽ được trả về bởi Arrays.asList (a) .toString(), trừ khi a là null, trong trường hợp đó "null" được trả về.

public static String deepToString(Object[] a) 
ie: String dump = Arrays.deepToString(array); 

Trả về biểu diễn chuỗi của "nội dung sâu" của mảng được chỉ định. Nếu mảng chứa các mảng khác như các phần tử, thì biểu diễn chuỗi chứa nội dung của chúng và vân vân. Phương pháp này được thiết kế để chuyển đổi mảng đa chiều thành chuỗi.

Biểu diễn chuỗi bao gồm danh sách các phần tử của mảng, được đặt trong dấu ngoặc vuông ("[]"). Các phần tử kề nhau được phân tách bằng các ký tự "," (dấu phẩy theo sau là dấu cách). Các phần tử được chuyển thành chuỗi như String.valueOf (Object), trừ khi chúng là mảng của chúng.

Trong trường hợp colletions, bạn có thể sử dụng phương pháp toArray():

List<YourObject> list = ..... 
YourObject[] array = list.toArray(new YourObject[0]); 
String dump = Arrays.deepToString(array); 
+0

Cảm ơn! đã làm say mê. –

0

Tùy thuộc vào mục đích của bạn, mà tôi giả định để gỡ lỗi mã hoặc khám phá một cấu trúc dữ liệu phức tạp, không in.

Sử dụng trình gỡ lỗi giao diện người dùng tốt như trình gỡ lỗi giao diện người dùng trong IntelliJ hoặc (rùng mình, làm ơn đừng làm) nhật thực. Java có một bộ công cụ hoàn thiện hơn và đầy đủ hơn dành cho các nhà phát triển so với các ngôn ngữ khác mà bạn đã liệt kê (tôi cũng đã làm việc trong hầu hết các ngôn ngữ đó). Php, Perl, vv là nguyên thủy và vì một số lý do mà mọi người cứ mong đợi phát triển trong một trình soạn thảo văn bản đơn giản. Java không hoạt động theo cách đó (ít nhất là không nếu bạn muốn ở trạng thái lành mạnh hoặc đang làm việc trên bất kỳ thứ gì lớn hơn dự án đồ chơi).

Sử dụng IDE đầy đủ tính năng và được xây dựng trong trình gỡ lỗi.

Trong những người khác bạn liệt kê không có một lựa chọn rất tốt cho một IDE và hội nhập gỡ lỗi là piss nghèo tốt nhất ... Đây là một trong những lợi thế lớn cho Java trên thực tế.

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