@Override
    public Object parse(SourceData sourceData, int rowIndex, Context context) {
        Object stringObj1 = stringParser1.parse(sourceData, rowIndex, context);
        Object stringObj2 = stringParser2.parse(sourceData, rowIndex, context);
        // If any of arguments is null, return null
        if (stringObj1 == null || stringObj2 == null) {
            return null;
        }
        String str1 = OperatorTools.parseString(stringObj1);
        String str2 = OperatorTools.parseString(stringObj2);
        if (startPositionParser != null) {
            Object startPositionObj = startPositionParser.parse(sourceData, rowIndex, context);
            // if startPositionObj is null, return null
            if (startPositionObj == null) {
                return null;
            }
            int startPosition = OperatorTools.parseBigDecimal(startPositionObj).intValue();
            return str2.indexOf(str1, startPosition - 1) + 1;
        } else {
            return str2.indexOf(str1) + 1;
        }
    }
LocateFunction  ->  locate(string1, string2[, integer])
description:
- Return NULL if any of arguments is NULL
- Return 0 if not found
- Return the position of the first occurrence of string1 in string2 after position integer
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/string/LocateFunction.java