2011-07-19 99 views
6

Tôi đang viết một chương trình sẽ thay thế nhiều từ trong một chuỗi. Tôi đang sử dụng mã này nhưng nó đang thay thế từ nhưng cho kết quả trong hai dòng khác nhau. Tôi muốn nhiều từ thay thế và xuất ra trong một dòng.Làm thế nào để thay thế nhiều từ trong một chuỗi trong Java?

import java.util.*; 
public class ReplaceString { 
    public static void main(String[] args) { 
     new ReplaceString().run(); 
    } 

    public void run() 
    { 

     System.out.println("Input String:\n");//// 
     Scanner keyboardScanner = new Scanner(System.in);///// 
     String inString = keyboardScanner.nextLine();///// 
     String strOutput = inString.replace("call me","cm"); 
     System.out.println(strOutput); 

     String strOutput1 = inString.replace("as soon as possible","asap"); 
     System.out.println(strOutput1);  

    } 
} 
+0

câu hỏi tương tự: http://stackoverflow.com/q/1326682/18511 – Kip

Trả lời

0

Sử dụng System.out.print() thay vì System.out.println()

0
String strOutput1 = inString.replace("as soon as possible","asap"); 

Bạn nên thay đổi điều đó để

String strOutput1 = strOutput .replace("as soon as possible","asap"); 
+0

Hi đây là thực sự hữu ích :) – shumaila

4

Tất nhiên nó in hai dòng: bạn có hai báo cáo in. Sử dụng mã này:

import java.util.*; 

public class ReplaceString { 
    public static void main(String[] args) { 
     new ReplaceString().run(); 
    } 

    public void run() 
    { 

     System.out.println("Input String:\n");//// 
     Scanner keyboardScanner = new Scanner(System.in);///// 
     String inString = keyboardScanner.nextLine();///// 
     String shortMessage = shortifyMessage(inString); 
     System.out.println(shortMessage); 
    } 

    public String shortifyMessage(String str) 
    { 
     String s = str; 
     s = s.replace("call me", "cm"); 
     s = s.replace("as soon as possible", "asap"); 
     // Add here some other replacements 

     return s; 
    } 
} 
+0

Hi, mã này là thực sự là một trong những tôi cần, tôi là soooooooooooooooo biết ơn u :) – shumaila

+1

@shumaila: Sau đó, bạn có thể nhấp vào đánh dấu ở bên trái của câu trả lời của tôi để chấp nhận câu trả lời này. Tất nhiên bạn luôn có thể upvote: D –

12

Nếu bạn muốn làm điều đó trong một tuyên bố duy nhất bạn có thể sử dụng:

String strOutput = inString.replace("call me","cm").replace("as soon as possible","asap"); 

Ngoài ra, nếu bạn có nhiều thay thế như vậy, nó có thể là khôn ngoan để lưu trữ chúng trong một số loại cấu trúc dữ liệu như mảng 2d. Ví dụ:

//array to hold replacements 
String[][] replacements = {{"call me", "cm"}, 
          {"as soon as possible", "asap"}}; 

//loop over the array and replace 
String strOutput = inString; 
for(String[] replacement: replacements) { 
    strOutput = strOutput.replace(replacement[0], replacement[1]); 
} 

System.out.println(strOutput); 
+0

+1: Đó thực sự là cách gọn gàng. –

+4

Nó không phải là cách thích hợp để làm điều đó bởi vì nếu bạn có đầu vào '" abc "' và 'thay thế = {{" a "} {" b "}, {" b "} {" c "}}' bạn nên mong đợi '" bcc "' trên đầu ra nhưng bạn sẽ nhận được '" ccc "'. Giải pháp được mô tả ở đây - [stackoverflow.com/questions/1326682/java-replacing-multiple-different-substring-in-a-string-at-once-or-in-the-most](http://stackoverflow. com/questions/1326682/java-replace-nhiều-khác nhau-chuỗi con-in-a-string-at-once-hoặc-trong-nhiều nhất). –

0

Sử dụng MessageFormat.format (queryString, retrieveArguments(). ToArray());

0

Vấn đề gốc là, khi bạn đã thực hiện thay thế đầu tiên, bạn không thể hoạt động trở lại với cùng chuỗi ban đầu đã cho. Tôi nghĩ cách thực hiện chính xác sẽ là sử dụng các bản sao khác nhau và chuyển từ bản này sang nội dung khác trong khi đang được thay thế Có thể, tốt hơn, giải pháp có thể chỉ thay thế sau mỗi lần thay thế xong xóa các mẫu đã được thay thế. ;)

0

Thay vì sử dụng replace sử dụng replaceAll mà làm việc cho tôi

String strOutput = inString.replaceAll("call me","cm").replaceAll("as soon as possible","asap"); 
0

Tất cả các câu trả lời ở trên có thể là đúng. Tuy nhiên, thay thế mỗi chuỗi một lần không hiệu quả. Đoạn mã sau từ Apache Commons StringUtils sẽ giúp nó thay thế hiệu quả tất cả các chuỗi trong một lần.

System.out.println("Input String:\n");//// 
    Scanner keyboardScanner = new Scanner(System.in);///// 
    String inString = keyboardScanner.nextLine();///// 
StringUtils.replaceEach(inString, new String[]{"call me", "as soon as possible"}, new String[]{"cm", "asap"}); 

Xin lưu ý rằng: phương pháp trên không hoạt động thay thế các từ trong kết quả thay thế trước đó. Ví dụ:

StringUtils.replaceEach("abcde", new String[]{"ab", "d"}, new String[]{"d", "t"}) 

sẽ cho kết quả: "dcte"

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