Suppose, there is a requirement to check that a particular string is present in a file but with a restriction that it should only be present between a pair of string. For example the string “your age” should be present in between “What is” and “?”.

Working code follows:

/*
* Just pass a String array with necessary parameters and you are good to go
*/
public boolean verifyTextPresence(String[] params)
   throws FileNotFoundException {
  String filePath = params[0];
                //string before the string to check
  String startStr = params[1];
                //string after the string to check
  String endStr = params[2];
                //string to find
                String strToCheck = params[3];
  boolean isStrPresent = false;
  Scanner scan = null;
  try {
   scan = new Scanner(new File(filePath));
   boolean isStartTag = false;
   while (scan.hasNextLine()) {
    String line = scan.nextLine();
    int startIndex = 0, endIndex=0;
    if (line.contains(startStr)) {
                                        // string flag to indicate that start string has been found  
     isStartTag = true;
     startIndex = line.indexOf(startStr);
    }
                                // we need to check that the end string is present and 
                                // it occurs after the start string, not before it
    if(isStartTag && line.contains(endStr)){
                                        // get the location of end string
     endIndex = line.indexOf(endStr, startIndex);
                                           // check if the string to find exists between the start and end strings
                             if(line.substring(startIndex, endIndex).contains(strToCheck)){
      isStrPresent = true;
                                                //terminate loop if the string has been found in a line
                                                break;  
         }
    }   
                       }
   if (isStrPresent) {
    System.out.println("String \"" + strToCheck
      + "\" is present between the start and end strings \""
      + startStr + "\" and \"" + endStr + "\" respectively");
    return true;
   }
                        //print error message if the string cannot be found
   String errMesg = "String \"" + strToCheck
     + "\" is NOT present between the start and end strings \""
     + startStr + "\" and \"" + endStr + "\" respectively";
   System.out.println(errMesg);
  } catch (FileNotFoundException fne) {
   throw fne;
  } finally {
   if(scan!=null){
    scan.close();
   }
  }
  return false;
 }

Let’s tweak in:

1. Always catch FileNotFoundException when dealing with files.
2. Close the scanner object in finally block. Starting java 7 this may be avoided if try-with-resources statement is used in which the resources are automatically closed.

Categorized in:

Java String,

Tagged in:

, ,