Suppose I have a list and then I add names to the list
List<String> listOfName = new ArrayList(); listOfName.add("abc"); listOfName.add("pqr"); listOfName.add("xyz");
And I have a String String names = "abcrnpqrrnxyz";
I want to verify that the string is comprised in the same order as the elements in the list are.
eg: abc should come first then pqr and then xyz
What I am trying to do:
int flag = 1; for(int i=0; i<listOfName.size()-1;i++){ if(names.replace("rn","").split(listOfName.get(i))[1].indexOf(listOfName.get(i+1))!=0){ flag = 0; break; } } if(flag==1){ System.out.println("True"); } else { System.out.println("False"); }
Is there any better solution for doing the same as I doubt that it might fail in some scenarios
Advertisement
Answer
Well, there is certainly a more “abstract” and semantically pretty way to do this:
public class CompareList { public static void main(String[] args) { List<String> listOfNames = new ArrayList<String>(); listOfNames.add("abc"); listOfNames.add("pqr"); listOfNames.add("xyz"); String names = "abcrnpqrrnxyz"; // define string boolean match = checkList(listOfNames, names, "rn"); //check match System.out.println(match); //print match } private static boolean checkList( List<String> list, String content, String delimiter) { return Arrays.asList( content.split(Pattern.quote(delimiter))).equals(list); } }
This will print true
.
Here you have method checkList()
(or whatever name you like) that splits the string using the given delimiter (rn
in your case), turns the resulting array into a List
and just calls equals()
on it to compare it with the input List
, as the equals()
implementation of List
(i quote) “Returns true if and only if the specified object is also a list, both lists have the same size, and all corresponding pairs of elements in the two lists are equal.”.