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

qinbaowei 2017-10-17 03:35:07
请教下如何判断aabbcc是否包含abc所有字符,用contains()和indexOf() 方法只能查链接在一起的,除了把字符串拆开用递归一个一个去匹配还有其他好一点的方法吗?
...全文
753 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,只是举个例子,类似于搜索,比如有一个标题"电影预告片:英伦对决",搜索"英伦对决预告片"的时候也会匹配到
内容概要:本文系统介绍了进程的基本概念与核心原理,阐述了进程作为程序在计算机一次运行活动的本质,是操作系统进行资源分配和调度的基本单位。文章详细解析了进程的五大特性——独立性、并发性、动态性、异步性和结构特征,并指出进程由程序代码、数据和进程控制块(PCB)三部分构成。同时,文列举了进程在操作系统管理、多任务处理、服务器开发、嵌入式系统以及分布式系统的广泛应用场景,并关联了操作系统、线程、PCB及进程调度等重要概念,最后归纳了进程相关的备考要点,涵盖生命周期、状态转换、调度算法及同步互斥机制等内容。; 适合人群:计算机专业学生、准备操作系统相关考试的学习者,以及从事系统编程、后端开发或嵌入式开发的技术人员;具备基本计算机组成和操作系统知识者更佳。; 使用场景及目标:①深入理解进程在操作系统的角色与工作机制;②掌握进程生命周期、状态变化及调度策略;③为技术面试、考研复试或课程学习提供理论支持;④辅助设计高并发、多任务的应用系统。; 阅读建议:建议结合操作系统教材或实际代码案例对照学习,重点关注进程状态图、PCB结构和调度算法的实现,通过画图和模拟加深对同步与互斥机制的理解。
内容概要:本文档《测量不确定度在符合性判定的应用》由国合格评定国家认可委员会发布,旨在为合格评定机构在进行符合性判定时提供科学的技术指导。文档系统阐述了如何在判断被测对象是否满足规定限值要求时,合理考虑测量不确定度及其对判定结果的影响,介绍了多种判定规则,如简单接受、准确度法、考虑测量能力指数和有保护带的判定规则,并深入讲解了合格概率、消费者与生产商风险的计算方法,强调通过风险评估优化接受区间设置,提升判定的科学性与公正性。; 适合人群:从事检测、校准、计量及合格评定工作的技术人员、实验室管理人员、质量控制人员以及相关领域的研究人员。; 使用场景及目标:① 在检测报告科学地做出与规范或标准的符合性声明;② 设计合理的判定规则以控制错误接受(消费者风险)和错误拒绝(生产商风险);③ 基于测量不确定度和生产过程特性,优化接受限设置,支持实验室在合同评审阶段与客户协商确定判定策略;④ 支持计量检定、产品认证、环境监测、食品安全等领域的合规性评价。; 阅读建议:此文档技术性强,涉及概率统计与测量理论,建议读者结合实际案例逐步理解各类判定规则的应用逻辑,重点关注第5章判定规则选择流程与第7章风险量化计算,宜配合标准文件如ISO/IEC 17025、GUM等一同学习,以全面掌握符合性判定的不确定性管理方法。

62,629

社区成员

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

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