
How to resolve Expression must be a list type: String issue in Apex?

I have written Apex code to return a list of alphanumeric characters from a string in reverse order. However, I am encountering the error “Expression must be a list type: String”. I need assistance in resolving this error and ensuring my function reverseAlphaNumericCharacters
correctly reverses the alphanumeric characters in the provided string.
Explore our Salesforce training in Hyderabad to gain practical, hands-on experience.
public class assessment {
public static List<String> reverseAlphaNumericCharacters(String s) {
List<String> reversedChars = new List<String>();
for (Integer i = s.length() - 1; i >= 0; i--) {
if (isAlphaNumeric(s[i])) {
reversedChars.add(s[i]);
}
}
return reversedChars;
}
private static Boolean isAlphaNumeric(String c) {
return ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') || ('0' <= c && c <= '9');
}
}
Solution 1:
The issue arises because, in Apex, a string isn’t treated like an array of characters, and direct indexing like s[i]
isn’t supported. Instead, you should use the substring
method to get individual characters. Here’s how you can modify your reverseAlphaNumericCharacters
method:
public class Assessment {
public static List<String> reverseAlphaNumericCharacters(String s) {
List<String> reversedChars = new List<String>();
for (Integer i = s.length() - 1; i >= 0; i--) {
String singleChar = s.substring(i, i + 1);
if (isAlphaNumeric(singleChar)) {
reversedChars.add(singleChar);
}
}
return reversedChars;
}
private static Boolean isAlphaNumeric(String c) {
// Assuming c is always a string of length 1
return ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') || ('0' <= c && c <= '9');
}
}
In this revised version:
Instead of s[i]
, s.substring(i, i + 1)
is used to get a string containing the single character at position i
.
The isAlphaNumeric
function now correctly handles a string input, assuming it’s always a single character in length.
Solution 2:
The issue with your code arises from trying to use the square bracket notation (s[i]
) to access characters in a string, which is not valid in Apex. Strings need to be accessed using the charAt()
method. Also, charAt()
returns a char
, not a String
, so you’ll need to convert the char to a String before adding it to the List<String>
.
Here’s the corrected version of your code:
public class Assessment {
public static List<String> reverseAlphaNumericCharacters(String s) {
List<String> reversedChars = new List<String>();
for (Integer i = s.length() - 1; i >= 0; i--) {
String currentChar = String.valueOf(s.charAt(i)); // Convert char to String
if (isAlphaNumeric(currentChar)) {
reversedChars.add(currentChar);
}
}
return reversedChars;
}
private static Boolean isAlphaNumeric(String c) {
return ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') || ('0' <= c && c <= '9');
}
}
Changes made:
- Used
s.charAt(i)
to get the character at indexi
from the strings
. - Converted the character to a String using
String.valueOf()
before using it in theisAlphaNumeric
function and adding it to thereversedChars
list.
This should resolve the “Expression must be a list type: String” error you were encountering.
Looking to master Salesforce? Engage with our Salesforce training in Hyderabad to gain practical experience. CRS Info Solutions provides a detailed Salesforce training program to boost your skills and career potential. With professional instructors and a comprehensive course outline, CRS Info Solutions is committed to your achievement in the Salesforce realm through our Career Enhancement program. Our curriculum covers all key aspects of Salesforce, ensuring a well-rounded education. Whether you’re a beginner or an advanced learner, they offer the necessary guidance and resources. Enroll in a free demo session today!