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

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



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

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

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

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

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

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

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

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

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

(4)對于裁剪后得到的字符串值tempStr,仍然執(zhí)行(3)的步驟,直到tempStr不再包含待查找的單詞word 即 代表本次單詞word的循環(huán)遍歷查找獲取出現(xiàn)的次數(shù)已經(jīng)結(jié)束了,相應的total即為本單詞word出現(xià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認為jvm虛擬機在進行優(yōu)化,第一時間想到應該都是配置堆內(nèi)存的大小,其次就是java垃圾收集器了。java垃圾收集器的配置對于jvm優(yōu)化來說是一個很重要的選擇,選擇合適的垃圾收集器可以讓jvm的性能有一個很大的提升。截止Jdk 1.8,一共有7款不同的垃圾收集器。每一款不同的垃圾收集器都有不同的特點,在具體使用的時候,需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());
}
}

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












補充:

1、本文涉及到的相關(guān)的源代碼可以到此地址,check出來進行查看學習:

https://gitee.com/steadyjack/SpringBootTechnology

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