org.springframework.util.StringUtils#countOccurrencesOf ( )源码实例Demo

下面列出了org.springframework.util.StringUtils#countOccurrencesOf ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: openemm   文件: MailingDeliveryTimeBasedDataSet.java
private static Date getDeliveryDate(String dateString) throws Exception {
    Date startDate;
    try {
        Calendar startDateCalendar = new GregorianCalendar();
        if (dateString.contains(".") && StringUtils.countOccurrencesOf(dateString, ":") > 1) {
            startDate = new SimpleDateFormat(DATE_PARAMETER_FORMAT_WITH_SECOND).parse(dateString);
            startDateCalendar.setTime(startDate);
        } else if (dateString.contains(":")) {
            startDate = new SimpleDateFormat(DATE_PARAMETER_FORMAT_WITH_HOUR).parse(dateString);
            startDateCalendar.setTime(startDate);
        } else {
            startDate = new SimpleDateFormat(DATE_PARAMETER_FORMAT).parse(dateString);
            startDateCalendar.setTime(startDate);
            startDateCalendar.set(Calendar.HOUR_OF_DAY, 0);
        }
        startDateCalendar.set(Calendar.MINUTE, 0);
        startDateCalendar.set(Calendar.SECOND, 0);
        startDateCalendar.set(Calendar.MILLISECOND, 0);
        return startDateCalendar.getTime();
    } catch (ParseException e) {
        throw new Exception("Error while parsing start date: " + dateString, e);
    }
}
 
源代码2 项目: openemm   文件: TimeBasedDataSet.java
protected static Date parseTimeBasedDate(String dateString, boolean isStartDate) throws Exception {
	Date date;
	 try {
		Calendar startDateCalendar = new GregorianCalendar();
		if (dateString.contains(".") && StringUtils.countOccurrencesOf(dateString, ":") > 1) {
			date = new SimpleDateFormat(DATE_PARAMETER_FORMAT_WITH_SECOND).parse(dateString);
			startDateCalendar.setTime(date);
		} else if (dateString.contains(":")) {
			date = new SimpleDateFormat(DATE_PARAMETER_FORMAT_WITH_HOUR).parse(dateString);
			startDateCalendar.setTime(date);
		} else {
			date = new SimpleDateFormat(DATE_PARAMETER_FORMAT).parse(dateString);
			startDateCalendar.setTime(date);
			startDateCalendar.set(Calendar.HOUR_OF_DAY, isStartDate ? 0 : 23);
		}
		startDateCalendar.set(Calendar.MINUTE, isStartDate ? 0 : 59);
		startDateCalendar.set(Calendar.SECOND, isStartDate ? 0 : 59);
		startDateCalendar.set(Calendar.MILLISECOND, isStartDate ? 0 : 999);
		date = startDateCalendar.getTime();
	} catch (ParseException e) {
		throw new Exception("Error while parsing date: " + dateString, e);
	}
	return date;
}
 
源代码3 项目: GreenSummer   文件: ConfigInspectorController.java
private void printYamlHtmlKey(String key, String previousKey, BufferedWriter theBW) throws IOException {
    int lastDot = key.lastIndexOf(".");
    if (lastDot > -1) {
        String prefix = key.substring(0, lastDot);
        // If the prefix of the previous key was different up to this point, print it,
        // else ignore it
        if (previousKey.length() <= lastDot || !previousKey.substring(0, lastDot).equals(prefix)) {
            printYamlHtmlKey(prefix, previousKey, theBW);
            theBW.write("<br/>");
        }
        for (int i = 0; i < StringUtils.countOccurrencesOf(prefix, ".") + 1; i++) {
            theBW.write("  ");
        }
        theBW.write(key.substring(lastDot + 1));
    }
    else {
        theBW.write(key);
    }
    theBW.write(": ");
}
 
源代码4 项目: GreenSummer   文件: ConfigInspectorController.java
private void printYamlKey(String key, String previousKey, BufferedWriter theBW) throws IOException {
    int lastDot = key.lastIndexOf(".");
    if (lastDot > -1) {
        String prefix = key.substring(0, lastDot);
        // If the prefix of the previous key was different up to this point, print it,
        // else ignore it
        if (previousKey.length() <= lastDot || !previousKey.substring(0, lastDot).equals(prefix)) {
            printYamlKey(prefix, previousKey, theBW);
            theBW.newLine();
        }
        for (int i = 0; i < StringUtils.countOccurrencesOf(prefix, ".") + 1; i++) {
            theBW.write("  ");
        }
        theBW.write(key.substring(lastDot + 1));
    }
    else {
        theBW.write(key);
    }
    theBW.write(": ");
}
 
源代码5 项目: Insights   文件: WebHookServiceImpl.java
/**
 * Validation of the Response Template which has been entered by the user
 * 
 * @param responseTemplate
 * @return
 * @throws InsightsCustomException
 */
private Boolean checkResponseTemplate(String responseTemplate) throws InsightsCustomException {
	try {
		StringTokenizer st = new StringTokenizer(responseTemplate, ",");
		while (st.hasMoreTokens()) {
			String keyValuePairs = st.nextToken();
			int count = StringUtils.countOccurrencesOf(keyValuePairs, "=");
			if (count != 1) {
				throw new InsightsCustomException(PlatformServiceConstants.INCORRECT_RESPONSE_TEMPLATE);
			} else {
				String[] dataKeyMapper = keyValuePairs.split("=");
				log.debug(" {}  , {} ", dataKeyMapper[0].trim(), dataKeyMapper[1].trim());
			}
		}
		return true;
	} catch (InsightsCustomException e) {
		log.error("Error in Response Template.. {}", e.getMessage());
		throw new InsightsCustomException(PlatformServiceConstants.INCORRECT_RESPONSE_TEMPLATE);
	}
}
 
/**
 * Recursively retrieve PortletContextResources that match the given pattern,
 * adding them to the given result set.
 * @param portletContext the PortletContext to work on
 * @param fullPattern the pattern to match against,
 * with preprended root directory path
 * @param dir the current directory
 * @param result the Set of matching Resources to add to
 * @throws IOException if directory contents could not be retrieved
 * @see org.springframework.web.portlet.context.PortletContextResource
 * @see javax.portlet.PortletContext#getResourcePaths
 */
protected void doRetrieveMatchingPortletContextResources(
		PortletContext portletContext, String fullPattern, String dir, Set<Resource> result) throws IOException {

	Set<String> candidates = portletContext.getResourcePaths(dir);
	if (candidates != null) {
		boolean dirDepthNotFixed = fullPattern.contains("**");
		for (Iterator<String> it = candidates.iterator(); it.hasNext();) {
			String currPath = it.next();
			if (currPath.endsWith("/") &&
					(dirDepthNotFixed ||
					StringUtils.countOccurrencesOf(currPath, "/") <= StringUtils.countOccurrencesOf(fullPattern, "/"))) {
				doRetrieveMatchingPortletContextResources(portletContext, fullPattern, currPath, result);
			}
			if (getPathMatcher().match(fullPattern, currPath)) {
				result.add(new PortletContextResource(portletContext, currPath));
			}
		}
	}
}
 
源代码7 项目: gemfirexd-oss   文件: ResultValidatorHelper.java
public static  ResultValidator noOfTimesOccuranceValidator(final int occurance, final String arg) {
  return new ResultValidator() {
    int count = 0;
    @Override
    public Status validate(String output) {
      Log.getLogWriter().info("Validating command output for having :" + arg + " " + occurance + " times...");
      count = StringUtils.countOccurrencesOf(output, arg);
      if(count != occurance) {
        return Status.ERROR;
      }
      return Status.SUCCESS;
    }

    @Override
    public String getMessage() {
      return "We were expecting " + occurance + " occurance of " + arg  + " in command output but we got it " + count + " times.";
    }
  };
}
 
源代码8 项目: gemfirexd-oss   文件: ResultValidatorHelper.java
public static ResultValidator onlyOneOccuranceValidator(final String... args) {
  return new ResultValidator() {

    private String failedString;
    int count = 0;
    @Override
    public Status validate(String output) {
      Log.getLogWriter().info("Validating command output for having :" + Arrays.toString(args) + " only once...");
      for (String arg : args) {
        count = StringUtils.countOccurrencesOf(output, arg);
        if (count != 1) {
          failedString = arg;
          return Status.ERROR;
        }
      }
      return Status.SUCCESS;
    }

    @Override
    public String getMessage() {
      return "We were expecting " + failedString + " to occur only once and we got it " + count + " times.";
    }
  };
}
 
源代码9 项目: spring-cloud-bus   文件: RemoteApplicationEvent.java
protected RemoteApplicationEvent(Object source, String originService,
		String destinationService) {
	super(source);
	this.originService = originService;
	if (destinationService == null) {
		destinationService = "**";
	}
	// If the destinationService is not already a wildcard, match everything that
	// follows
	// if there at most two path elements, and last element is not a global wildcard
	// already
	if (!"**".equals(destinationService)) {
		if (StringUtils.countOccurrencesOf(destinationService, ":") <= 1
				&& !StringUtils.endsWithIgnoreCase(destinationService, ":**")) {
			// All instances of the destination unless specifically requested
			destinationService = destinationService + ":**";
		}
	}
	this.destinationService = destinationService;
	this.id = UUID.randomUUID().toString();
}
 
源代码10 项目: gemfirexd-oss   文件: ResultValidatorHelper.java
public static  ResultValidator noOfTimesOccuranceValidator(final int occurance, final String arg) {
  return new ResultValidator() {
    int count = 0;
    @Override
    public Status validate(String output) {
      Log.getLogWriter().info("Validating command output for having :" + arg + " " + occurance + " times...");
      count = StringUtils.countOccurrencesOf(output, arg);
      if(count != occurance) {
        return Status.ERROR;
      }
      return Status.SUCCESS;
    }

    @Override
    public String getMessage() {
      return "We were expecting " + occurance + " occurance of " + arg  + " in command output but we got it " + count + " times.";
    }
  };
}
 
源代码11 项目: gemfirexd-oss   文件: ResultValidatorHelper.java
public static ResultValidator onlyOneOccuranceValidator(final String... args) {
  return new ResultValidator() {

    private String failedString;
    int count = 0;
    @Override
    public Status validate(String output) {
      Log.getLogWriter().info("Validating command output for having :" + Arrays.toString(args) + " only once...");
      for (String arg : args) {
        count = StringUtils.countOccurrencesOf(output, arg);
        if (count != 1) {
          failedString = arg;
          return Status.ERROR;
        }
      }
      return Status.SUCCESS;
    }

    @Override
    public String getMessage() {
      return "We were expecting " + failedString + " to occur only once and we got it " + count + " times.";
    }
  };
}
 
源代码12 项目: citrus-simulator   文件: WsdlScenarioGenerator.java
/**
 * Returns an array of all namespace declarations, found on wsdl-level.
 *
 * @param wsdl
 * @return
 */
private String[] extractNamespacesOnWsdlLevel(XmlObject wsdl) {
    int cursor = wsdl.xmlText().indexOf(":") + ":definitions ".length();
    String nsWsdlOrig = wsdl.xmlText().substring(cursor, wsdl.xmlText().indexOf(">", cursor));
    int noNs = StringUtils.countOccurrencesOf(nsWsdlOrig, "xmlns:");
    String[] namespacesWsdl = new String[noNs];
    cursor = 0;
    for (int i=0; i<noNs; i++) {
        int begin = nsWsdlOrig.indexOf("xmlns:", cursor);
        int end = nsWsdlOrig.indexOf("\"", begin + 20);
        namespacesWsdl[i] = nsWsdlOrig.substring(begin, end) + "\"";
        cursor = end;
    }
    return namespacesWsdl;
}
 
源代码13 项目: spring-cloud-contract   文件: PluginUnitTest.java
@Test
public void shouldGenerateContractTestsForPactAndMaintainIndents() throws Exception {
	File basedir = getBasedir("pact");

	executeMojo(basedir, "generateTests", defaultPackageForTests());

	assertFilesPresent(basedir,
			"target/generated-test-sources/contracts/org/springframework/cloud/contract/verifier/tests/ContractVerifierTest.java");
	File test = new File(basedir,
			"target/generated-test-sources/contracts/org/springframework/cloud/contract/verifier/tests/ContractVerifierTest.java");
	String testContents = readFileToString(test, defaultCharset());
	int countOccurrencesOf = StringUtils.countOccurrencesOf(testContents,
			"\t\tMockMvcRequestSpecification");
	then(countOccurrencesOf).isEqualTo(4);
}
 
/**
 * Recursively retrieve ServletContextResources that match the given pattern,
 * adding them to the given result set.
 * @param servletContext the ServletContext to work on
 * @param fullPattern the pattern to match against,
 * with preprended root directory path
 * @param dir the current directory
 * @param result the Set of matching Resources to add to
 * @throws IOException if directory contents could not be retrieved
 * @see ServletContextResource
 * @see javax.servlet.ServletContext#getResourcePaths
 */
protected void doRetrieveMatchingServletContextResources(
		ServletContext servletContext, String fullPattern, String dir, Set<Resource> result)
		throws IOException {

	Set<String> candidates = servletContext.getResourcePaths(dir);
	if (candidates != null) {
		boolean dirDepthNotFixed = fullPattern.contains("**");
		int jarFileSep = fullPattern.indexOf(ResourceUtils.JAR_URL_SEPARATOR);
		String jarFilePath = null;
		String pathInJarFile = null;
		if (jarFileSep > 0 && jarFileSep + ResourceUtils.JAR_URL_SEPARATOR.length() < fullPattern.length()) {
			jarFilePath = fullPattern.substring(0, jarFileSep);
			pathInJarFile = fullPattern.substring(jarFileSep + ResourceUtils.JAR_URL_SEPARATOR.length());
		}
		for (String currPath : candidates) {
			if (!currPath.startsWith(dir)) {
				// Returned resource path does not start with relative directory:
				// assuming absolute path returned -> strip absolute path.
				int dirIndex = currPath.indexOf(dir);
				if (dirIndex != -1) {
					currPath = currPath.substring(dirIndex);
				}
			}
			if (currPath.endsWith("/") && (dirDepthNotFixed || StringUtils.countOccurrencesOf(currPath, "/") <=
					StringUtils.countOccurrencesOf(fullPattern, "/"))) {
				// Search subdirectories recursively: ServletContext.getResourcePaths
				// only returns entries for one directory level.
				doRetrieveMatchingServletContextResources(servletContext, fullPattern, currPath, result);
			}
			if (jarFilePath != null && getPathMatcher().match(jarFilePath, currPath)) {
				// Base pattern matches a jar file - search for matching entries within.
				String absoluteJarPath = servletContext.getRealPath(currPath);
				if (absoluteJarPath != null) {
					doRetrieveMatchingJarEntries(absoluteJarPath, pathInJarFile, result);
				}
			}
			if (getPathMatcher().match(fullPattern, currPath)) {
				result.add(new ServletContextResource(servletContext, currPath));
			}
		}
	}
}
 
/**
 * Recursively retrieve ServletContextResources that match the given pattern,
 * adding them to the given result set.
 * @param servletContext the ServletContext to work on
 * @param fullPattern the pattern to match against,
 * with preprended root directory path
 * @param dir the current directory
 * @param result the Set of matching Resources to add to
 * @throws IOException if directory contents could not be retrieved
 * @see ServletContextResource
 * @see javax.servlet.ServletContext#getResourcePaths
 */
protected void doRetrieveMatchingServletContextResources(
		ServletContext servletContext, String fullPattern, String dir, Set<Resource> result)
		throws IOException {

	Set<String> candidates = servletContext.getResourcePaths(dir);
	if (candidates != null) {
		boolean dirDepthNotFixed = fullPattern.contains("**");
		int jarFileSep = fullPattern.indexOf(ResourceUtils.JAR_URL_SEPARATOR);
		String jarFilePath = null;
		String pathInJarFile = null;
		if (jarFileSep > 0 && jarFileSep + ResourceUtils.JAR_URL_SEPARATOR.length() < fullPattern.length()) {
			jarFilePath = fullPattern.substring(0, jarFileSep);
			pathInJarFile = fullPattern.substring(jarFileSep + ResourceUtils.JAR_URL_SEPARATOR.length());
		}
		for (String currPath : candidates) {
			if (!currPath.startsWith(dir)) {
				// Returned resource path does not start with relative directory:
				// assuming absolute path returned -> strip absolute path.
				int dirIndex = currPath.indexOf(dir);
				if (dirIndex != -1) {
					currPath = currPath.substring(dirIndex);
				}
			}
			if (currPath.endsWith("/") && (dirDepthNotFixed || StringUtils.countOccurrencesOf(currPath, "/") <=
					StringUtils.countOccurrencesOf(fullPattern, "/"))) {
				// Search subdirectories recursively: ServletContext.getResourcePaths
				// only returns entries for one directory level.
				doRetrieveMatchingServletContextResources(servletContext, fullPattern, currPath, result);
			}
			if (jarFilePath != null && getPathMatcher().match(jarFilePath, currPath)) {
				// Base pattern matches a jar file - search for matching entries within.
				String absoluteJarPath = servletContext.getRealPath(currPath);
				if (absoluteJarPath != null) {
					doRetrieveMatchingJarEntries(absoluteJarPath, pathInJarFile, result);
				}
			}
			if (getPathMatcher().match(fullPattern, currPath)) {
				result.add(new ServletContextResource(servletContext, currPath));
			}
		}
	}
}
 
/**
 * Recursively retrieve ServletContextResources that match the given pattern,
 * adding them to the given result set.
 * @param servletContext the ServletContext to work on
 * @param fullPattern the pattern to match against,
 * with preprended root directory path
 * @param dir the current directory
 * @param result the Set of matching Resources to add to
 * @throws IOException if directory contents could not be retrieved
 * @see ServletContextResource
 * @see javax.servlet.ServletContext#getResourcePaths
 */
protected void doRetrieveMatchingServletContextResources(
		ServletContext servletContext, String fullPattern, String dir, Set<Resource> result)
		throws IOException {

	Set<String> candidates = servletContext.getResourcePaths(dir);
	if (candidates != null) {
		boolean dirDepthNotFixed = fullPattern.contains("**");
		int jarFileSep = fullPattern.indexOf(ResourceUtils.JAR_URL_SEPARATOR);
		String jarFilePath = null;
		String pathInJarFile = null;
		if (jarFileSep > 0 && jarFileSep + ResourceUtils.JAR_URL_SEPARATOR.length() < fullPattern.length()) {
			jarFilePath = fullPattern.substring(0, jarFileSep);
			pathInJarFile = fullPattern.substring(jarFileSep + ResourceUtils.JAR_URL_SEPARATOR.length());
		}
		for (String currPath : candidates) {
			if (!currPath.startsWith(dir)) {
				// Returned resource path does not start with relative directory:
				// assuming absolute path returned -> strip absolute path.
				int dirIndex = currPath.indexOf(dir);
				if (dirIndex != -1) {
					currPath = currPath.substring(dirIndex);
				}
			}
			if (currPath.endsWith("/") && (dirDepthNotFixed || StringUtils.countOccurrencesOf(currPath, "/") <=
					StringUtils.countOccurrencesOf(fullPattern, "/"))) {
				// Search subdirectories recursively: ServletContext.getResourcePaths
				// only returns entries for one directory level.
				doRetrieveMatchingServletContextResources(servletContext, fullPattern, currPath, result);
			}
			if (jarFilePath != null && getPathMatcher().match(jarFilePath, currPath)) {
				// Base pattern matches a jar file - search for matching entries within.
				String absoluteJarPath = servletContext.getRealPath(currPath);
				if (absoluteJarPath != null) {
					doRetrieveMatchingJarEntries(absoluteJarPath, pathInJarFile, result);
				}
			}
			if (getPathMatcher().match(fullPattern, currPath)) {
				result.add(new ServletContextResource(servletContext, currPath));
			}
		}
	}
}
 
源代码17 项目: springmvc-raml-plugin   文件: NamingHelper.java
private static String getActionNameFromObjects(ApiActionMetadata apiActionMetadata) {

		String uri = apiActionMetadata.getResource().getUri();
		String name = convertActionTypeToIntent(apiActionMetadata.getActionType(), doesUriEndsWithParam(uri));

		if (apiActionMetadata.getActionType().equals(RamlActionType.GET)) {
			Map<String, ApiBodyMetadata> responseBody = apiActionMetadata.getResponseBody();
			if (responseBody.size() > 0) {
				ApiBodyMetadata apiBodyMetadata = responseBody.values().iterator().next();
				String responseObjectName = cleanNameForJava(StringUtils.capitalize(apiBodyMetadata.getName()));
				if (apiBodyMetadata.isArray()) {
					responseObjectName = StringUtils.capitalize(NamingHelper.pluralize(responseObjectName));
				}
				name += responseObjectName;
			} else {
				name += "Object";
			}

			name = appendActionNameWithSingleParameter(apiActionMetadata, name);

		} else if (apiActionMetadata.getActionType().equals(RamlActionType.DELETE)) {

			// for DELETE method we'll still use resource name
			String url = cleanLeadingAndTrailingNewLineAndChars(apiActionMetadata.getResource().getUri());
			String[] splitUrl = SLASH.split(url);
			String resourceNameToUse = null;
			if (splitUrl.length > 1 && StringUtils.countOccurrencesOf(splitUrl[splitUrl.length - 1], "{") > 0) {
				resourceNameToUse = splitUrl[splitUrl.length - 2];
			} else {
				resourceNameToUse = splitUrl[splitUrl.length - 1];
			}

			name = name + StringUtils.capitalize(cleanNameForJava(singularize(resourceNameToUse)));
			name = appendActionNameWithSingleParameter(apiActionMetadata, name);

		} else {
			ApiBodyMetadata requestBody = apiActionMetadata.getRequestBody();
			String creationObject;
			if (requestBody != null) {
				creationObject = requestBody.getName();
			} else {
				creationObject = apiActionMetadata.getParent().getResourceUri();
				creationObject = creationObject.substring(creationObject.lastIndexOf('/') + 1);
			}
			return name + cleanNameForJava(StringUtils.capitalize(creationObject));
		}

		return name;
	}
 
/**
 * Recursively retrieve ServletContextResources that match the given pattern,
 * adding them to the given result set.
 * @param servletContext the ServletContext to work on
 * @param fullPattern the pattern to match against,
 * with preprended root directory path
 * @param dir the current directory
 * @param result the Set of matching Resources to add to
 * @throws IOException if directory contents could not be retrieved
 * @see ServletContextResource
 * @see javax.servlet.ServletContext#getResourcePaths
 */
protected void doRetrieveMatchingServletContextResources(
		ServletContext servletContext, String fullPattern, String dir, Set<Resource> result)
		throws IOException {

	Set<String> candidates = servletContext.getResourcePaths(dir);
	if (candidates != null) {
		boolean dirDepthNotFixed = fullPattern.contains("**");
		int jarFileSep = fullPattern.indexOf(ResourceUtils.JAR_URL_SEPARATOR);
		String jarFilePath = null;
		String pathInJarFile = null;
		if (jarFileSep > 0 && jarFileSep + ResourceUtils.JAR_URL_SEPARATOR.length() < fullPattern.length()) {
			jarFilePath = fullPattern.substring(0, jarFileSep);
			pathInJarFile = fullPattern.substring(jarFileSep + ResourceUtils.JAR_URL_SEPARATOR.length());
		}
		for (String currPath : candidates) {
			if (!currPath.startsWith(dir)) {
				// Returned resource path does not start with relative directory:
				// assuming absolute path returned -> strip absolute path.
				int dirIndex = currPath.indexOf(dir);
				if (dirIndex != -1) {
					currPath = currPath.substring(dirIndex);
				}
			}
			if (currPath.endsWith("/") && (dirDepthNotFixed || StringUtils.countOccurrencesOf(currPath, "/") <=
					StringUtils.countOccurrencesOf(fullPattern, "/"))) {
				// Search subdirectories recursively: ServletContext.getResourcePaths
				// only returns entries for one directory level.
				doRetrieveMatchingServletContextResources(servletContext, fullPattern, currPath, result);
			}
			if (jarFilePath != null && getPathMatcher().match(jarFilePath, currPath)) {
				// Base pattern matches a jar file - search for matching entries within.
				String absoluteJarPath = servletContext.getRealPath(currPath);
				if (absoluteJarPath != null) {
					doRetrieveMatchingJarEntries(absoluteJarPath, pathInJarFile, result);
				}
			}
			if (getPathMatcher().match(fullPattern, currPath)) {
				result.add(new ServletContextResource(servletContext, currPath));
			}
		}
	}
}
 
源代码19 项目: cloud-config   文件: ZkPath.java
public int getDepth() {
    return path.isEmpty() ? 0 : StringUtils.countOccurrencesOf(path, "/")+1;
}
 
/**
 * @param sql Base SQL.
 * @return Randomized SQL string.
 */
private String randomizeSql(String sql) {
    int cnt = StringUtils.countOccurrencesOf(sql, "%s");

    Integer[] sub = new Integer[cnt];

    for (int i = 0; i < cnt; i++)
        sub[i] = nextRandom(args.range());

    sql = String.format(sql, sub);

    return sql;
}