簡體   English   中英

如何在Java中實現模板(用list的元素替換字符串)。

[英]How to implement the template(replacing string with the element of list) in java.

我正在開發一個應用程序,其中遇到了需要用字符串替換識別詞的需求,即替換模板中的實際數據。 在此,我從數組列表中獲取數據,為此,我實現了以下解決方案。

List<String> abc = new ArrayList<String>();
        abc.add("willy brown");
        abc.add("jamster");
        String message="//$^$// has commented on //$^$// .";
        String messages[] = message.split(" ");
        StringBuffer finalMessage = new StringBuffer();
        for(int i=0,j=0; i<messages.length && j<=abc.size(); i++){
            System.out.println("messages : " + messages[i]);
            if(messages[i].equals("//$^$//")){
                messages[i] = abc.get(j);
                System.out.println("after changes " +messages[i]);
                j++;
            }
            finalMessage.append(messages[i] +" ");
        }
        System.out.println("final message: " + finalMessage);

我只想知道是否有更好的方法來實現此功能,並且是否存在任何漏洞。

我將為此使用MessageFormat.format:

    List<String> abc = new ArrayList<String>();
    abc.add("willy brown");
    abc.add("jamster");

    String message = "{0} has commented on {1}";
    String finalMessage = MessageFormat.format(message, abc.toArray(new String[abc.size()]));
    System.out.println(finalMessage);

您可以使用內置的String和StringBuffer方法執行此任務,而不必將消息拆分為數組。 我還建議將字段標識符提取到一個單獨的變量中。 上帝禁止你在某個地方錯過它!

    String fieldIdentifier = "//$^$//";

    List<String> abc = new ArrayList<>();
    abc.add("willy brown");
    abc.add("jamster");

    String message= fieldIdentifier + " has commented on "  + fieldIdentifier + ".";
    StringBuffer finalMessage = new StringBuffer(message);

    int fieldCount = 0;

    while(finalMessage.indexOf(fieldIdentifier) > -1) {
        int index = finalMessage.indexOf(fieldIdentifier);
        finalMessage = finalMessage.replace(index, index + fieldIdentifier.length(), abc.get(fieldCount));

        fieldCount++;
    }

    System.out.println("final message: " + finalMessage);

編輯:對於這些類型的操作,最好使用StringBuffer,因為它可變並且比使用String快得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM