2013-08-07 73 views
7

Tôi có các loại tên khác nhau. Giống nhưJava xóa chuỗi cuối cùng

ABC BCD, EFG HGF, HGF HJK 

Tôi muốn thay thế , cuối cùng bằng "and". Vì vậy, định dạng sẽ được như thế này

ABC BCD, EFG HGF & HGF HJK 

tôi đã cố gắng với điều này

names = "Jon Benda, Jon Wetchler, Thomas Leibig " 
StringBuilder sbd = new StringBuilder(); 
String[] n = getNames.split("\\s+"); 
System.out.println(n.length); 
for (int i = 0; i < n.length; i++) { 
    sbd.append(n[i]); 
    System.out.print(n[i]); 
    if (i < n.length - 3) 
     sbd.append(" "); 
    else if (i < n.length - 2) 
     sbd.append(" & "); 
} 
System.out.print("\n"); 
System.out.print(sbd); 
+0

Vì vậy, có gì sai với nỗ lực của bạn? Nó ra sao? –

+0

Tại sao bạn không chia ','? Sau đó, mọi thành viên trong mảng của bạn sẽ là tên đầy đủ. Chỉ cần nối thêm tất cả những thứ này theo cách bạn muốn và phần cuối cùng gắn nó với &. Hoặc bạn có thể thay thế ',' bằng 'và' – Loki

Trả lời

22

Tại sao phức tạp hơn nó? Bạn có thể tìm kiếm các chỉ số cuối cùng của , sử dụng String#lastIndexOf và sau đó sử dụng StringBuilder#replace:

int lastIdx = names.lastIndexOf(","); 
names = new StringBuilder(names).replace(lastIdx, lastIdx+1, "and").toString(); 
+3

đã viết một chương trình cho nó và trong khi đó, bạn đã đăng một câu trả lời tuyệt vời :) upvote từ tôi –

+0

Cảm ơn câu trả lời của bạn. – user2579475

3

Hãy thử điều này

String name = "ABC BCD, EFG HGF, HGF HJK"; 
    int index=name.lastIndexOf(","); 
    StringBuilder sb=new StringBuilder(); 
    sb.append(name.substring(0,index)); 
    sb.append(" and "); 
    sb.append(name.substring(index+1,name.length())); 
    System.out.println(sb); 
4

Bạn phải sử dụng RegEx?

gì về:

int lastIndexOfComa = getNames.lastIndexOf(","); 
names = getNames.substring(0, lastIndexOfComa) + " &" + getNames.substring(lastIndexOfComa, getNames.length); 

?

+0

Tôi đoán @Maroun Maroun đã có đầu tiên, và có lẽ StringBuilder là hiệu quả hơn ... – Elist

+0

Các '+' trên chuỗi sẽ sử dụng một 'StringBuilder' dưới mui xe, vì vậy tôi không biết thời tiết sẽ có nhiều sự khác biệt về hiệu quả nếu có. –

5

Bạn có thể làm điều gì đó như thế này.

public static void main(String[] args) { 
     String names = "Jon Benda, Jon Wetchler, Thomas Leibig "; 
     String newNames = ""; 
     StringBuilder sbd = new StringBuilder(); 
     String[] n = names.split(","); 
     System.out.println(n.length); 
     for (int i = 0; i < n.length; i++) { 

      if (i == n.length - 1) { 
       newNames = newNames + " and " + n[i]; 
      } else { 
       newNames = newNames + n[i] + " "; 
      } 
     } 
     System.out.println(newNames); 
    } 

này kết quả đầu ra

Jon Benda Jon Wetchler and Thomas Leibig 
0

Một lót:

name=name.replace(name.substring(name.lastIndexOf(",")),"&"+name.substring(name.lastIndexOf(",")+1)) 
0

Đã trả lời nhưng điều này là sự đóng góp của tôi:

String name = "ABC BCD, EFG HGF, HGF HJK";  
name = name.replaceFirst("(.*),", "$1 &") 

Trong trường hợp này, là việc sử dụng cùng một replaceFirst và replaceAll để biểu thức chính quy chỉ matc h một lần.

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