Java面试题~判断字符串常量值出现的次数(附代码实现)

作者: 修罗debug
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。



摘要:本文我们将分享介绍一道关于Java的“字符串面试题~代码实现题”,主要实现的功能“查找特定的字符串单词word在一个长长的字符串str中出现的次数”,其中,debug将采用一种比较简陋的Java“字符串包含+定位+裁剪”的方式进行实现!

内容:这是一道Java开发工程师在求职面试时,企业可能会出的关于字符串方面的“代码实战编写”的题目,大体的内容为:给定一些字符串单词wordList,然后分别查找出这些字符串单词在给定的“文本串”中出现的次数。

比如给定的“文本串”内容words为:“debug认为jvm虚拟机在进行优化,第一时间想到应该都是配置堆内存的大小,其次就是java垃圾收集器了。java垃圾收集器的配置对于jvm优化来说是一个很重要的选择,选择合适的垃圾收集器可以让jvm的性能有一个很大的提升。截止Jdk 1.8,一共有7款不同的垃圾收集器。每一款不同的垃圾收集器都有不同的特点,在具体使用的时候,需debug要根据具体的情况选用不同的垃圾收集器debug

同时给定的待查找的字符串单词列表为:jvm,垃圾,debug,java

则每个字符串单词出现的次数分别为:jvm=3,垃圾=6,debug=3,java=2

下面,我们可以采用如下的思路加以实现:

(1)遍历待查找的字符串单词列表wordList,获取每个字符串单词word,并初始化每个单词word出现的次数初始化值为0;

(2)仍然是遍历wordList,得到每个单词word,在真正处理之前,将文本串内容words赋值给一个临时的字符串变量tempStr,并定义一个单词出现的次数的记录器total。接下来便是对循环遍历获取的word进行处理,即(3)。

(3)首先需要判断一下tempStr是否包含待查找的单词word,如果是,则代表待遍历的单词word是存在的,total加1,此时需要定位出word所在的位置,并对tempStr进行裁剪,裁剪后得到的字符串值仍然赋值给tempStr。

(4)对于裁剪后得到的字符串值tempStr,仍然执行(3)的步骤,直到tempStr不再包含待查找的单词word 即 代表本次单词word的循环遍历查找获取出现的次数已经结束了,相应的total即为本单词word出现的次数。

接下来,我们采用源代码进行实现:

import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.apache.commons.lang3.StringUtils;

import java.util.Map;
import java.util.Set;

public class CharacterOperation {

private static final String str="debug认为jvm虚拟机在进行优化,第一时间想到应该都是配置堆内存的大小,其次就是java垃圾收集器了。java垃圾收集器的配置对于jvm优化来说是一个很重要的选择,选择合适的垃圾收集器可以让jvm的性能有一个很大的提升。截止Jdk 1.8,一共有7款不同的垃圾收集器。每一款不同的垃圾收集器都有不同的特点,在具体使用的时候,需debug要根据具体的情况选用不同的垃圾收集器debug";

private static final Set<String> set= Sets.newHashSet("jvm","垃圾","debug","java","mysql");

public static Map<String,Integer> method1(){
Map<String,Integer> map= Maps.newHashMap();

set.parallelStream().forEach(s -> map.put(s,0));
set.parallelStream().forEach(e -> {
String tempStr=str.intern();
Integer total=0;

while (StringUtils.isNotBlank(tempStr) && tempStr.contains(e)){
total += 1;
tempStr=tempStr.substring(tempStr.indexOf(e)+e.length());
}
map.put(e,total);
});
return map;
}

public static void main(String[] args) {
System.out.println(method1());
}
}

最终得到相应的输出结果如下图所示:  












补充:

1、本文涉及到的相关的源代码可以到此地址,check出来进行查看学习:

https://gitee.com/steadyjack/SpringBootTechnology

2、关注一下Debug的技术微信公众号,最新的技术文章、课程以及技术专栏将会第一时间在公众号发布哦!