问题:数据库中保存了一批用csv格式存储的数据,在使用的时候,需要判断str是否包含在csv中。

这个问题有2个解决方案:一种是采用字符串包含判断,另一种是通过把csv数据拆分为String[]数组,再逐个判断

实现的代码如下:

package com.bytrees.utils;
import org.apache.commons.lang3.StringUtils;
public class CsvUtils {
	 *  判断字符串是否在CSV格式的数据内
	 * @param needle 要检查的数据
	 * @param haystack CSV格式数据
	 * @return
	public static boolean isInCsv(final String needle, final String haystack) {
		//判断needle或haystack是否为空
		if (StringUtils.isEmpty(haystack) || StringUtils.isEmpty(needle)) {
			return false;
		//判断CSV中是否仅有一个元素
		//如果仅有一个元素,直接判断是否相等
		if (haystack.indexOf(',') == -1) {
			return  needle.compareTo(haystack) == 0;
		//判断是否在第一个元素
		if (needle.compareTo(haystack.substring(0, haystack.indexOf(','))) == 0) {
			return true;
		//判断是否在最后一个元素
		if (needle.compareTo(haystack.substring(haystack.lastIndexOf(',') + 1)) == 0) {
			return true;
		//判断是否在中间
		String middleNeedle = "," + needle + ",";
		if (haystack.indexOf(middleNeedle) >= 0) {
			return true;
		return false;
	 * 拆分为数组进行判断
	 * @param needle
	 * @param haystack
	 * @return
	public static boolean isInCsv2(String needle, final String haystack) {
		String[] explodeList = StringUtils.split(haystack, ",");
		if (explodeList == null) {
			return false;
		for (String explode : explodeList) {
			if (needle.compareTo(explode) == 0) {
				return true;
		return false;

性能测试,csv数据每个长度为6位,一个用884个,字符串长度为4688736。每个方法执行100w次,耗时结果如下?

 耗时(ms)
使用字符串判断400
拆分为数组进行判断47418

可以看到使用字符串判断,并没有创建新的对象,执行效率非常快。

问题:数据库中保存了一批用csv格式存储的数据,在使用的时候,需要判断str是否包含在csv中。这个问题有2个解决方案:一种是采用字符串包含判断,另一种是通过把csv数据拆分为String[]数组,再逐个判断实现的代码如下:package com.bytrees.utils;import org.apache.commons.lang3.StringUtils;public ... //参数是需要判断的子字符串 publicvoidjudge(StringsubString){ Stringstring="judgeissubString"; //返回指定子字符串在此字符串中第... 判断一个字符串是否包含某个特定子串是常见的场景,比如判断一篇文章是否包含敏感词汇、判断日志是否有ERROR信息等。本文将介绍四种方法并进行性能测试。 2 四种方法 2.1 JDK原生方法String.indexOf 在String的函数中,提供了indexOf(subStr)方法,返回子串subStr第一次出现的位置,如果不存在则返回-1。例子如下: //包含Java assertEqu... String str = "hello world"; int index = str.indexOf("world"); System.out.println(index); // 输出 6 这里的 indexOf() 方法返回的是子串字符串中第一次出现的位置,如果没有找到则返回 -1。