JAVA 如何查出一个字符串中包含的另一个字符串中的所有字符

qinbaowei 2017-10-17 03:35:07
请教下如何判断aabbcc是否包含abc所有字符,用contains()和indexOf() 方法只能查链接在一起的,除了把字符串拆开用递归一个一个去匹配还有其他好一点的方法吗?
...全文
696 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
attilax 2019-05-20
  • 打赏
  • 举报
回复
Atitit 搜索查出字符串中包含的所有关键词

JAVA 如何查出一个字符串中包含的另一个字符串中的所有字符

原理,使用indexof 一个循环就出来了一个列表,格式如下
{
"txt":"软件理论方面的书籍 Atitit软件理论方面的书籍 目录 1. 计算机科学分为计算机理论和计算机应用。计算机基础理论包含以",
"key":"理论",
"positionStart":18,
"padLen":10,
"keyWithPad":"籍 Atitit软件理论方面的书籍 目录 1"
},


/sumdoclist/src/com/attilax/search/SearchScanUtil.java

package com.attilax.search;

import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

public class SearchScanUtil {

public static void main(String[] args) {
String t = "软件理论方面的书籍 Atitit软件理论方面的书籍 目录 1. 计算机科学分为计算机理论和计算机应用。计算机基础理论包含以";
String k = "理论";
// String t = "abcdefabc";
// String k = "abc";
List<Map> search = search(t, k,10);
System.out.println(JSON.toJSONString(search,true));

}

public static List<Map> search(String txt, String key,int padLen) {
List<Map> li = Lists.newLinkedList();
int fromIndex = 0;
while (true) {
int position = txt.indexOf(key, fromIndex);
if(position==-1)
return li;
Map m = Maps.newLinkedHashMap();
m.put("txt", txt);
m.put("key", key);
m.put("positionStart", position);
m.put("padLen", padLen);
m.put("keyWithPad", getkeyWithPad(txt,position,padLen,key));
li.add(m);
fromIndex=position+key.length();

}

}
private static Object getkeyWithPad(String txt, int position, int padLen, String key) {
int beginIndex=position-padLen;
if(beginIndex<0)
beginIndex=0;
int endIndex =position+key.length()+padLen;
if(endIndex>txt.length())
endIndex=txt.length();
return txt.substring(beginIndex, endIndex);
}

public static List<Map> search(String txt, String key) {
List<Map> li = Lists.newLinkedList();
int fromIndex = 0;
while (true) {
int position = txt.indexOf(key, fromIndex);
if(position==-1)
return li;
Map m = Maps.newLinkedHashMap();
m.put("txt", txt);
m.put("key", key);
m.put("positionStart", position);
li.add(m);
fromIndex=position+key.length();

}

}

}



[
{
"txt":"软件理论方面的书籍 Atitit软件理论方面的书籍 目录 1. 计算机科学分为计算机理论和计算机应用。计算机基础理论包含以",
"key":"理论",
"positionStart":2,
"padLen":10,
"keyWithPad":"软件理论方面的书籍 Atit"
},
{
"txt":"软件理论方面的书籍 Atitit软件理论方面的书籍 目录 1. 计算机科学分为计算机理论和计算机应用。计算机基础理论包含以",
"key":"理论",
"positionStart":18,
"padLen":10,
"keyWithPad":"籍 Atitit软件理论方面的书籍 目录 1"
},
{
"txt":"软件理论方面的书籍 Atitit软件理论方面的书籍 目录 1. 计算机科学分为计算机理论和计算机应用。计算机基础理论包含以",
"key":"理论",
"positionStart":42,
"padLen":10,
"keyWithPad":"计算机科学分为计算机理论和计算机应用。计算机"
},
{
"txt":"软件理论方面的书籍 Atitit软件理论方面的书籍 目录 1. 计算机科学分为计算机理论和计算机应用。计算机基础理论包含以",
"key":"理论",
"positionStart":56,
"padLen":10,
"keyWithPad":"算机应用。计算机基础理论包含以"
}
]
qq_39912309 2017-10-19
  • 打赏
  • 举报
回复
搜索的话可以用solr
6点A君 2017-10-19
  • 打赏
  • 举报
回复
如果是想实现一个类似于搜索的功能,就不要把思维定在java,去看看数据库全文检索,或者利用redis来实现
qq_39696541 2017-10-18
  • 打赏
  • 举报
回复
有点全文检索的意思
一个帅逼 2017-10-17
  • 打赏
  • 举报
回复
	/**
	 * @author zsj
	 * @param f  父字符串
	 * @param s  子字符串
	 * @return
	 */
	public boolean strTest(String f,String s){
		int n=0,m=0,total=0;
		boolean flag=false;
		while(n<f.length()&&m<s.length()){
			if(f.charAt(n)==s.charAt(m)){
				n=0;
				m++;
				total++;
			}else{
				n++;
			}
			if(total==s.length()){
				flag=true;
				break;
			}
		}
		return flag;
	}
随手写了个,不知道满不满足你的需求,主要是我不知道你的具体需求,比如:“abbcc”,“aabc”是能匹配还是不能呢,你可以看着改
繁华终归落尽 2017-10-17
  • 打赏
  • 举报
回复
去重,排序,contains()?
qinbaowei 2017-10-17
  • 打赏
  • 举报
回复
实际上不是abc,只是举个例子,类似于搜索,比如有一个标题"电影预告片:英伦对决",搜索"英伦对决预告片"的时候也会匹配到

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧