本文我们将分享介绍一道关于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
下面,我们可以采用如下的思路加以实现:
- 遍历待查找的字符串单词列表wordList,获取每个字符串单词word,并初始化每个单词word出现的次数初始化值为0;
- 仍然是遍历wordList,得到每个单词word,在真正处理之前,将文本串内容words赋值给一个临时的字符串变量tempStr,并定义一个单词出现的次数的记录器total。接下来便是对循环遍历获取的word进行处理,即(3)。
- 首先需要判断一下tempStr是否包含待查找的单词word,如果是,则代表待遍历的单词word是存在的,total加1,此时需要定位出word所在的位置,并对tempStr进行裁剪,裁剪后得到的字符串值仍然赋值给tempStr。
- 对于裁剪后得到的字符串值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()); } }
最终得到相应的输出结果如下图所示:
当然啦,虽然说效果是实现了,但是在性能层面以及代码编写层面,我觉得肯定有更好的、更优的方式,各位小伙伴如果有更好的实现方式,可以 debug相关的扣扣或者vx,然后进行交流,或者也可以将实现后的代码打包发给我,我整理后也会将相关的代码分享发布出来,以供大家学习(当然啦,自然会备注该代码的归属!)