Java面試題~判斷字符串常量值出現(xiàn)的次數(shù)(附代碼實(shí)現(xiàn))

作者: 修羅debug
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 by-sa 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。



摘要:本文我們將分享介紹一道關(guān)于Java的“字符串面試題~代碼實(shí)現(xiàn)題”,主要實(shí)現(xiàn)的功能“查找特定的字符串單詞word在一個(gè)長(zhǎng)長(zhǎng)的字符串str中出現(xiàn)的次數(shù)”,其中,debug將采用一種比較簡(jiǎn)陋的Java“字符串包含+定位+裁剪”的方式進(jìn)行實(shí)現(xiàn)!

內(nèi)容:這是一道Java開(kāi)發(fā)工程師在求職面試時(shí),企業(yè)可能會(huì)出的關(guān)于字符串方面的“代碼實(shí)戰(zhàn)編寫(xiě)”的題目,大體的內(nèi)容為:給定一些字符串單詞wordList,然后分別查找出這些字符串單詞在給定的“文本串”中出現(xiàn)的次數(shù)。

比如給定的“文本串”內(nèi)容words為:“debug認(rèn)為jvm虛擬機(jī)在進(jìn)行優(yōu)化,第一時(shí)間想到應(yīng)該都是配置堆內(nèi)存的大小,其次就是java垃圾收集器了。java垃圾收集器的配置對(duì)于jvm優(yōu)化來(lái)說(shuō)是一個(gè)很重要的選擇,選擇合適的垃圾收集器可以讓jvm的性能有一個(gè)很大的提升。截止Jdk 1.8,一共有7款不同的垃圾收集器。每一款不同的垃圾收集器都有不同的特點(diǎn),在具體使用的時(shí)候,需debug要根據(jù)具體的情況選用不同的垃圾收集器debug

同時(shí)給定的待查找的字符串單詞列表為:jvm,垃圾,debug,java

則每個(gè)字符串單詞出現(xiàn)的次數(shù)分別為:jvm=3,垃圾=6,debug=3,java=2

下面,我們可以采用如下的思路加以實(shí)現(xiàn):

(1)遍歷待查找的字符串單詞列表wordList,獲取每個(gè)字符串單詞word,并初始化每個(gè)單詞word出現(xiàn)的次數(shù)初始化值為0;

(2)仍然是遍歷wordList,得到每個(gè)單詞word,在真正處理之前,將文本串內(nèi)容words賦值給一個(gè)臨時(shí)的字符串變量tempStr,并定義一個(gè)單詞出現(xiàn)的次數(shù)的記錄器total。接下來(lái)便是對(duì)循環(huán)遍歷獲取的word進(jìn)行處理,即(3)。

(3)首先需要判斷一下tempStr是否包含待查找的單詞word,如果是,則代表待遍歷的單詞word是存在的,total加1,此時(shí)需要定位出word所在的位置,并對(duì)tempStr進(jìn)行裁剪,裁剪后得到的字符串值仍然賦值給tempStr。

(4)對(duì)于裁剪后得到的字符串值tempStr,仍然執(zhí)行(3)的步驟,直到tempStr不再包含待查找的單詞word 即 代表本次單詞word的循環(huán)遍歷查找獲取出現(xiàn)的次數(shù)已經(jīng)結(jié)束了,相應(yīng)的total即為本單詞word出現(xiàn)的次數(shù)。

接下來(lái),我們采用源代碼進(jìn)行實(shí)現(xiàn):

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認(rèn)為jvm虛擬機(jī)在進(jìn)行優(yōu)化,第一時(shí)間想到應(yīng)該都是配置堆內(nèi)存的大小,其次就是java垃圾收集器了。java垃圾收集器的配置對(duì)于jvm優(yōu)化來(lái)說(shuō)是一個(gè)很重要的選擇,選擇合適的垃圾收集器可以讓jvm的性能有一個(gè)很大的提升。截止Jdk 1.8,一共有7款不同的垃圾收集器。每一款不同的垃圾收集器都有不同的特點(diǎn),在具體使用的時(shí)候,需debug要根據(jù)具體的情況選用不同的垃圾收集器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());
}
}

最終得到相應(yīng)的輸出結(jié)果如下圖所示:  












補(bǔ)充:

1、本文涉及到的相關(guān)的源代碼可以到此地址,check出來(lái)進(jìn)行查看學(xué)習(xí):

https://gitee.com/steadyjack/SpringBootTechnology

2、關(guān)注一下Debug的技術(shù)微信公眾號(hào),最新的技術(shù)文章、課程以及技術(shù)專欄將會(huì)第一時(shí)間在公眾號(hào)發(fā)布哦!