问题说明:
现在的一些高级程序语言对于字符串的处理支持越来越大,不过字符串搜寻本身仍是值得探讨的课题,在这里以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());
}
}
}
分享到:
相关推荐
基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用...
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`,以及如何结合使用它们来满足各种字符串处理...
在C#编程语言中,处理字符串是常见的任务之一,其中包括删除字符串中的特定部分或子字符串。本篇文章将详细探讨如何在C#中实现这一功能,包括多种方法和实用技巧。 首先,C#提供了多种内置方法来操作字符串,比如`...
在C++中,我们通常会遇到三种主要的字符串形式:C字符串,string对象,以及字符串字面值。这些字符串形式各有特点,适用场景不同,理解它们之间的差异对于编写高效、安全的代码至关重要。 一、字符串字面值 字符串...
内置的`StringReplace`函数虽然提供了基本的替换服务,但在处理大量数据或长字符串时,其性能可能不尽人意。针对这种情况,开发人员经常寻找更高效的替代方案,如在本案例中提到的“Q_Replace.pas”文件所包含的快速...
在编程领域,尤其是在使用C++、Java或C#等面向对象的语言时,经常需要将字符串数组转换为单一的string类型。这种操作在处理数据输入、输出或者格式化时非常常见。下面我们将详细讨论如何在不同语言中实现这个过程,...
本资料包"单片机C语言源码学习参考-字符串函数string.h应用举例.zip"聚焦于C语言中的字符串处理,重点讲解了如何利用标准库`string.h`中的函数来操作和管理字符串。下面我们将深入探讨`string.h`库中的关键函数及其...
首先,C#提供了丰富的字符串类(System.String)和正则表达式类(System.Text.RegularExpressions)来帮助我们完成这项工作。在标准的字符串方法中,没有直接提供一个功能可以获取两个已知字符串之间的子串,但我们...
String对象的方法 方法一: indexOf() (推荐) var str = "123" console.log(str.indexOf("2") !...match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。 方法三: search()
在Android开发中,处理图像数据是一项常见的任务,而Bitmap和String是两个核心的数据类型,分别代表位图图像和文本字符串。Bitmap对象用于存储和显示图像,而String则常用于保存和传输文本信息。本篇文章将深入探讨...
接下来,我们可以使用`CONCAT`函数或`STRING`构造函数将字符数组转换为字符串: ```scl ResultString := CONCAT(CharArray); // 或者 ResultString := STRING(CharArray); ``` 这样,`ResultString`就包含了'ABCDE'...
在Java编程语言中,字符串(String)是一个至关重要的概念,它是由多个字符按照特定顺序组成的序列。在Java中,字符串被视为对象,主要通过`String`类进行操作。`String`类的实例是不可变的,意味着一旦创建,就不能...
在键盘输入两个字符串,相同显示MATCH,不同显示NOMATCH
在 Swift 中,字符串(String)处理是编程中的基础且关键部分。Swift 的字符串类型是一个强大的、支持多种操作的字符串类,它提供了丰富的API来处理文本数据。以下是 Swift 字符串处理的一些特点: 在实际编程中,...
给写了2个方法,一个是直接截取单个需要的字符串,比如字符串string a="ab123456",我只需要提取3,那么就是单独截取就可以了,从2开始到4结束就行。 第二个是把所有的符合条件的字符串都截取出来,提取出来,比如...
1. **Arduino String 类**: Arduino IDE 提供了一个名为 `String` 的类,它允许我们创建、操作和管理字符串。`String` 类提供了许多方法,如 `concat()`, `substring()`, `indexOf()`, `charAt()` 等,用于对字符串...
其语法为Match(string, textpattern),其中string是指定要检查是否匹配指定模式的字符串,textpattern是指定文本匹配模式。返回值为一个布尔值,如果字符串string与模式textpattern相匹配,则函数返回TRUE,否则返回...
在C++编程语言中,`std::string`是用于处理字符串的重要类,它提供了丰富的功能,包括字符串的创建、操作和管理。在这个实例研究中,我们聚焦于`std::string`类的一个关键特性:重载操作符`+=`,这个操作符用于连接...