2012-05-10 20 views
6

Ok, đây là lần đầu tiên tôi đăng bài ở đây, vì vậy hãy chịu đựng tôi.Trao đổi vị trí của các phần tử trong một mảng trong java?

Tôi có tên theo định dạng "Smith, Bob I" và tôi cần chuyển chuỗi này để đọc "Bob I. Smith". Bất kỳ ý tưởng về làm thế nào để đi về việc này?

Đây là một cách mà tôi đã thử và trong khi thực hiện công việc, có vẻ khá cẩu thả.

public static void main(String[] args) { 
     String s = "Smith, Bob I.", r = ""; 
     String[] names; 

     for(int i =0; i < s.length(); i++){ 
      if(s.indexOf(',') != -1){ 
       if(s.charAt(i) != ',') 
        r += s.charAt(i); 
      } 

     } 
     names = r.split(" "); 
     for(int i = 0; i < names.length; i++){ 
     } 
     System.out.println(names[1] +" " + names[2] + " " + names[0]); 


    } 
+1

+1 cho nỗ lực – Venki

+0

thuật toán của bạn có thể sẽ phụ thuộc một chút về những gì sắp xếp các quy tắc về đầu vào mà bạn có, vì điều này có thể yêu cầu các bước bổ sung để xử lý các trường hợp đặc biệt hoặc cho phép các phím tắt khác nhau vì các dữ liệu phù hợp. Ví dụ: luôn luôn có một món quà ban đầu ở giữa hoặc đôi khi sẽ không có tên đệm hoặc tên đệm đầy đủ. Còn các tựa game như II hay Jr thì sao? Tất cả các tên có đầu tiên và cuối cùng không? Vv: –

+0

Được rồi, đây là công cụ thu thập tên khi chúng được đưa vào từ các văn bản không có cấu trúc hoặc chúng được thu thập bằng cách cào web. Chúng xuất hiện ở tất cả các loại định dạng, tức là "Bob I. Smith", "Smith, Bob I", "Bob Smith", "Smith Bob". Tôi cần phát triển một cách để làm cho tất cả các tên thành một định dạng được thống nhất, hiện tại, hoặc là 'Đầu tiên M. Cuối cùng' hoặc 'Cuối cùng, Đầu tiên M' – Lambda

Trả lời

10

Nếu tên luôn là <last name>, <firstname>, hãy thử này:

String name = "Smith, Bob I.".replaceAll("(.*),\\s+(.*)", "$2 $1"); 

này sẽ thu thập Smith vào nhóm 1 và Bob I. vào nhóm 2, mà sau đó được truy cập như $1$2 trong chuỗi thay thế. Do các nhóm (.*) trong biểu thức toàn bộ chuỗi phù hợp và sẽ được thay thế hoàn toàn bằng thay thế, chỉ là 2 nhóm được đổi chỗ và phân tách bằng ký tự khoảng trắng.

+0

Tất cả trong một dòng. Tuyệt quá! –

+0

@userunknown như xa như tôi có thể nói từ OP đó là một yêu cầu: 'Smith, Bob I' ->' Bob I. Smith' - mặc dù tôi thừa nhận rằng tôi không thêm dấu chấm, vì tôi không chắc liệu đó có phải là một lỗi đánh máy (trong mã OP có dấu chấm hiện diện) hoặc thực sự là một yêu cầu - nên dễ dàng thêm vào. – Thomas

+0

@userunknown hoặc bạn có lỗi pixel: 'I.' + lỗi pixel có thể trông giống như 'I,': P – Thomas

5
String[] names = "Smith, Bob I.".split("[, ]+"); 
    System.out.println(names[1] + " " + names[2] + " " + names[0]); 
4
final String[] s = "Smith, Bob I.".split(","); 
System.out.println(String.format("%s %s", s[1].trim(), s[0])); 
+0

Hoặc 'System.out.printf ("% s% s% n ", s [1] .trim(), s [0])); ' –

+1

@PaulVargas Bạn phải xem câu lệnh println là mã thử nghiệm, mã thực sẽ ** trả về ** chuỗi đó. Bạn không có gì để trở lại trong ví dụ của bạn. –

3
String s = "Smith, Bob I."; 
String result = s.substring(s.indexOf(" ")).trim() + " " 
      + s.substring(0, s.indexOf(",")); 
+0

"Bob I.Smith" là kết quả của tôi. Trống có vẻ thất lạc. –

+0

Vẫn còn trống ở phía trước Bob, đối với tôi. –

+0

Ohh ... xin lỗi, ngay bây giờ nó hoạt động tốt. – isvforall