问题说明:
现在的一些高级程序语言对于字符串的处理支持越来越大,不过字符串搜寻本身仍是值得探讨的课题,在这里以Boyer Moore法来说明如何进行字符串说明,这个方法速度快且容易理解。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class StringMatch {
private int[] skip;
private int p;
private String str;
private String key;
public StringMatch(String key) {
skip = new int[256];
this.key = key;
for(int k = 0; k <= 255; k++)
skip[k] = key.length();
for(int k = 0; k < key.length() - 1; k++)
skip[key.charAt(k)] = key.length() - k - 1;
}
public void search(String str) {
this.str = str;
p = search(key.length()-1, str, key);
}
private int search(int p, String input, String key) {
while(p < input.length()) {
String tmp = input.substring(
p-key.length()+1, p+1);
if(tmp.equals(key)) // 比较两个字符串是否相同
return p-key.length()+1;
p += skip[input.charAt(p)];
}
return -1;
}
public boolean hasNext() {
return (p != -1);
}
public String next() {
String tmp = str.substring(p);
p = search(p+key.length()+1, str, key);
return tmp;
}
public static void main(String[] args)
throws IOException {
BufferedReader bufReader =
new BufferedReader(
new InputStreamReader(System.in));
System.out.print("请输入字符串:");
String str = bufReader.readLine();
System.out.print("请输入搜寻关键字:");
String key = bufReader.readLine();
StringMatch strMatch = new StringMatch(key);
strMatch.search(str);
while(strMatch.hasNext()) {
System.out.println(strMatch.next());
}
}
}
分享到:
相关推荐
305-字符串函数string.h应用举例(51单片机C语言实例Proteus仿真和代码)305-字符串函数string.h应用举例(51单片机C语言实例Proteus仿真和代码)305-字符串函数string.h应用举例(51单片机C语言实例Proteus仿真和代码)...
最新单片机仿真 字符串函数string.h应用举例最新单片机仿真 字符串函数string.h应用举例最新单片机仿真 字符串函数string.h应用举例最新单片机仿真 字符串函数string.h应用举例最新单片机仿真 字符串函数string.h...
在C++编程中,`std::string`是一个非常重要的数据类型,用于表示和操作字符串。本文将详细解析两种常用的C++ `std::string`截取字符串的方法:`find`和`find_last_of`,以及如何结合使用它们来满足各种字符串处理...
本项目“字符串比对String Compare”提供了一个简易的工具,用于直观地进行字符串的比较。该工具基于.NET Framework 2.0开发,用户在使用时需要注意系统可能需要安装此版本的.NET环境。 字符串比对涉及到的知识点...
本文将深入探讨字符串、String类以及StringBuilder类,帮助你更好地理解和应用这些基础知识。 首先,我们关注的是String类。在C#中,String类是不可变的,这意味着一旦一个字符串对象被创建,它的内容就不能被改变...
在C#编程语言中,处理字符串是常见的任务之一,其中包括删除字符串中的特定部分或子字符串。本篇文章将详细探讨如何在C#中实现这一功能,包括多种方法和实用技巧。 首先,C#提供了多种内置方法来操作字符串,比如`...
内置的`StringReplace`函数虽然提供了基本的替换服务,但在处理大量数据或长字符串时,其性能可能不尽人意。针对这种情况,开发人员经常寻找更高效的替代方案,如在本案例中提到的“Q_Replace.pas”文件所包含的快速...
本资料包"单片机C语言源码学习参考-字符串函数string.h应用举例.zip"聚焦于C语言中的字符串处理,重点讲解了如何利用标准库`string.h`中的函数来操作和管理字符串。下面我们将深入探讨`string.h`库中的关键函数及其...
其语法为Match(string, textpattern),其中string是指定要检查是否匹配指定模式的字符串,textpattern是指定文本匹配模式。返回值为一个布尔值,如果字符串string与模式textpattern相匹配,则函数返回TRUE,否则返回...
首先,C#提供了丰富的字符串类(System.String)和正则表达式类(System.Text.RegularExpressions)来帮助我们完成这项工作。在标准的字符串方法中,没有直接提供一个功能可以获取两个已知字符串之间的子串,但我们...
String对象的方法 方法一: indexOf() (推荐) var str = "123" console.log(str.indexOf("2") !...match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。 方法三: search()
在Android开发中,处理图像数据是一项常见的任务,而Bitmap和String是两个核心的数据类型,分别代表位图图像和文本字符串。Bitmap对象用于存储和显示图像,而String则常用于保存和传输文本信息。本篇文章将深入探讨...
总结,C#中的Base64字符串与普通字符串互转是通过`System.Convert`类提供的`ToBase64String`和`FromBase64String`方法实现的。在进行转换时,需要确保对字符串的编码有准确的理解,以便正确地转换和还原。在实际应用...
必须实现如下操作,字符串比较、求串的长度、判断串是否为空、将串置空、字符串赋值(包括两个字符串类复制,一个字符串赋值到CmyString对象)、求字符串中的一个字符或改变字符串中的一个字符(采用重载[]),完成...
接下来,我们可以使用`CONCAT`函数或`STRING`构造函数将字符数组转换为字符串: ```scl ResultString := CONCAT(CharArray); // 或者 ResultString := STRING(CharArray); ``` 这样,`ResultString`就包含了'ABCDE'...
本篇文章将详细讲解如何将string类型的XML字符串转换为JSON字符串,并介绍相关的技术知识。 首先,理解XML和JSON的基本结构是至关重要的。XML是一种树形结构的标记语言,通过标签来定义元素和属性,例如: ```xml ...
在Java中,String类是用来创建和操作字符串的。当你需要判断两个字符串是否相等时,可以使用equals()方法和==运算符,但它们的行为是不同的。 使用equals()方法判断字符串是否相等 equals()方法是Object类的一个方法...
在JavaScript中,字符串(String)与JSON(JavaScript Object Notation)之间的转换是常见的操作。JSON是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人阅读和编写,同时也易于机器解析和生成。当我们...
在这里,`inputString`是你想要拆分的原始字符串,`delimiter`是用于标识子字符串边界的字符或字符串。例如,如果你有一个逗号分隔的字符串,你可以这样拆分: ```vb Dim str As String = "苹果,香蕉,橙子" Dim ...
在Java编程语言中,字符串(String)是一个至关重要的概念,它是由多个字符按照特定顺序组成的序列。在Java中,字符串被视为对象,主要通过`String`类进行操作。`String`类的实例是不可变的,意味着一旦创建,就不能...