用Java接受两个字符串 统计第二个字符串在第一个字符串里出现的次数 输出样式“出现的次数:x”
时间: 2024-10-21 21:08:59 浏览: 24
在Java中,你可以使用`String`类的`indexOf()`方法以及循环结构来统计一个字符串在另一个字符串中出现的次数。以下是一个简单的示例:
```java
public class Main {
public static void main(String[] args) {
// 定义两个字符串
String str1 = "这是第一个字符串";
String str2 = "字符串";
// 初始化出现次数为0
int count = 0;
// 使用while循环遍历str1,查找str2的存在
while (str1.contains(str2)) {
count++; // 每次找到就增加次数
str1 = str1.substring(str1.indexOf(str2) + str2.length()); // 移除已找到的部分,继续查找
}
// 输出结果
System.out.println("出现的次数:" + count);
}
}
```
这个程序会输出第二个字符串在第一个字符串中出现的次数。注意,`contains()`方法返回布尔值,表示是否包含指定的子串,而`indexOf()`方法返回第一次出现子串的位置索引。
相关问题
小强在参加《密室逃生》游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成) 的箱子,并给出箱子编号,箱子编号为 1~N 。 每个箱子中都有一个 字符串s ,字符串由大写字母、小写字母、数字、标点符号、空格组成,需要在这些字符串中找到所有的字母,忽略大小写后排列出对应的密码串,并返回匹配密码的箱子序号。提示:满足条件的箱子不超过1个。第一行为 key 的字符串, 第二行为箱子 boxes,为数组样式,以空格分隔,箱子 N 数量满足 1 ≤ N ≤ 10000,s 长度满足 0 ≤ s.length ≤ 50,密码为仅包含小写字母的升序字符串,且不存在重复字母,密码 K 长度1 ≤ K.l e n g t h ≤ 26;返回对应箱子编号, 如不存在符合要求的密码箱,则返回 -1。java输出不同方法
以下是Java语言的不同方法实现:
方法一:暴力枚举
思路:遍历所有箱子,将每一个箱子中的字符串中的所有字母提取出来,排序后与给定的密码比较,若相同则返回箱子编号,否则继续遍历下一个箱子。
代码实现:
```
public static int findBox(String key, String[] boxes) {
char[] password = key.toCharArray();
Arrays.sort(password);//给定密码排序
for(int i = 0; i < boxes.length; i++) {
String box = boxes[i];
char[] letters = box.replaceAll("[^a-zA-Z]", "").toLowerCase().toCharArray();//提取箱子字符串中的字母并转为小写字母数组
Arrays.sort(letters);//排序
if(Arrays.equals(password, letters)) {//比较密码和箱子字符串中的字母排序后是否相同
return i + 1;//返回箱子编号
}
}
return -1;//未找到符合要求的箱子
}
```
方法二:哈希表
思路:将给定的密码中的字母及其出现次数存入哈希表中,遍历每个箱子中的字符串,统计其中每个字母出现的次数,最后比较两个哈希表是否相同,若相同则返回箱子编号,否则继续遍历下一个箱子。
代码实现:
```
public static int findBox(String key, String[] boxes) {
Map<Character, Integer> passwordMap = new HashMap<>();
for(char c : key.toCharArray()) {//将给定密码中的字母及其出现次数存入哈希表中
passwordMap.put(c, passwordMap.getOrDefault(c, 0) + 1);
}
for(int i = 0; i < boxes.length; i++) {
String box = boxes[i];
Map<Character, Integer> letterMap = new HashMap<>();
for(char c : box.toCharArray()) {
if(Character.isLetter(c)) {
char lc = Character.toLowerCase(c);
letterMap.put(lc, letterMap.getOrDefault(lc, 0) + 1);//统计箱子字符串中的字母出现次数
}
}
if(passwordMap.equals(letterMap)) {//比较两个哈希表是否相同
return i + 1;//返回箱子编号
}
}
return -1;//未找到符合要求的箱子
}
```
方法三:位运算
思路:将给定的密码中的字母转化为二进制数,每个二进制数的第i位表示第i个字母是否出现,遍历每个箱子中的字符串,统计其中每个字母出现的次数,将其转化为二进制数与给定密码的二进制数进行比较,若相同则返回箱子编号,否则继续遍历下一个箱子。
代码实现:
```
public static int findBox(String key, String[] boxes) {
int password = 0;
for(char c : key.toCharArray()) {//将给定密码中的字母转化为二进制数
int pos = c - 'a';
password |= (1 << pos);
}
for(int i = 0; i < boxes.length; i++) {
String box = boxes[i];
int letters = 0;
for(char c : box.toCharArray()) {
if(Character.isLetter(c)) {
int pos = Character.toLowerCase(c) - 'a';
letters |= (1 << pos);//统计箱子字符串中的字母出现次数
}
}
if(password == letters) {//比较两个二进制数是否相同
return i + 1;//返回箱子编号
}
}
return -1;//未找到符合要求的箱子
}
```
输入格式 第1行:一个长度为1到6 的大写字母串,表示彗星的名字 第2行:一个长度为1到6的大写字母串,表示队伍的名字。编程代码
输入格式通常用于描述程序或脚本需要接收数据的方式。在这个例子中,对于一个简单的文本交互或比赛系统,它说明了两个部分的输入样式:
1. **彗星名字**: 第一行是一个由1到6个大写字母组成的字符串,这可能是代表特定彗星的名称。例如,"COMETX" 或 "HAYABUSA"。
2. **队伍名字**: 第二行也是一个同样由1到6个大写字母组成字符串,表示参赛队伍的名称,如 "STARWARS" 或 "SPACEexplorers"。
编程代码中,这样的输入可能会通过`sys.stdin.readline()`(Python)、`cin >>` (C++), `Scanner.nextLine()` (Java)等方式从标准输入读取。例如,在Python中,处理这两行输入的一般形式可能像这样:
```python
# 获取彗星名字
comet_name = input().strip()
# 获取队伍名字
team_name = input().strip()
```
请注意,实际编程中,你还需要根据语言特性、文件输入还是网络请求等因素调整读取方式。此外,`strip()`函数用于去除输入字符串两侧的空白字符。
阅读全文