7

I need help to write a method which will do some kind of string formatting. I have list of ids of an object. It may be any object.Like this:

List<Id> listContactIds = [select id from contact limit 5];

And I have a certain string format like this:

String format = "{name} belongs to {Account.Name}";

I need to call a method. Suppose the method name is formatString.

formatString(listContacts, format);

The method should be able to return list of formatted strings. We can take the exact field names enclosed in {} from the format string.

How to acheive this?

1
  • 2
    Could you go through your question and check it a bit? For example, the top line will throw an error on assigning List<Contact> to List<Id>. Also, you then use Account further down. In the end, the answer should be a simple regex search and using a map (which the returned object is) to find the value by sObject.get('field'). But you should also list what you've tried so far. Commented Oct 31, 2013 at 11:48

3 Answers 3

8

You could use the string format(String stringToFormat, List formattingArguments) method.

Example:

String formatted = string.format('{0} belongs to {1}', new string[]{variable1, variable2});
3

This is the working code which will handle relationship fields also:

//By Using sObject List you can store records of any object
List<sObject> acc = [Select name,Account.Name,Account.Id from Contact limit 10];

//Insted of using a single string as format, I've used a list of sting where the first and last value is
// field names and the middle one is the text you want to use in formatting.
String[] fieldformat = new String[]{'Name', 'belongs to', 'Account.Name'};


//This is a method that does the formatting for you and returns you a list of formatted strings
List<String> formatString (List<sObject> objects,  List<String> format)
{
    List<String> formattedStrings = new List<String>();
    for(sObject obj : objects)
    {
        String Str = ((format[0].contains('.')) ? getString(obj,format[0]) : String.valueOf(obj.get(format[0]))) + ' ' + format[1] + ' ' + ((format[2].contains('.')) ? getString(obj,format[2]): String.valueOf(obj.get(format[2])));
        formattedStrings.add(Str);
    }
     return formattedStrings;
}
List<String> outPut = formatString(acc, fieldformat);

String getString(Sobject obj, String str){
    String objName = str.substring(0,str.indexOf('.'));
    String fieldName = str.substring(str.indexOf('.')+1,str.length());
    return String.valueOf(obj.getSObject(objName).get(fieldName));
}
System.debug(outPut);
2

It could be something like this:

List<Contact> listContacts = [select name,Account.Name from Contact limit 5];
list<String> formattedstrings = new list<string>();
for (Contact cont:listContacts) {
    formattedstrings.add(cont.name+' belongs to '+cont.Account.name);
}

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.