「Java面試題」關於String,最近被問到了這2道面試題


「Java面試題」關於String,最近被問到了這2道面試題

1. 前言

最近面試了幾家公司,體驗了一下電話面試和今年剛火起來的視頻面試

雖然之前就有一些公司會先通過電話面試的形式先評估下候選人的能力水平,但好像不多,至少我以前的面試形式100%都是現場面試

面試過程中,不可避免的被問到了很多面試題,本篇博客就總結下面試過程中被問到的關於String的2道面試題,分別是:

  1. 如何判斷一個字符串中某個字符出現的次數?
  2. 如何反轉一個字符串?

其餘的面試題,目前都已梳理出來,後續會以博客的形式進行分享。

2. 如何判斷一個字符串中某個字符出現的次數?

在直接問這個問題之前,面試官先問了我下面這個問題:

請說一下String常用的方法有哪些?

該問題其實是考察Java基礎,畢竟String類在平時的開發中使用非常廣泛,我當時主要說了以下方法:

  1. length
  2. equals
  3. trim
  4. substring
  5. concat
  6. indexOf
  7. lastIndexOf
  8. replace
  9. split
  10. toLowerCase
  11. toUpperCase

以上只是面試時我想到的一少部分方法,更多String的方法大家可在IDEA中查看源碼,畢竟太多了,如下所示:

「Java面試題」關於String,最近被問到了這2道面試題

「Java面試題」關於String,最近被問到了這2道面試題

在回答完上述問題後,面試官緊接著問了該問題:

如何判斷一個字符串中某個字符出現的次數?

聽到該問題,我腦海中第一反應是先把字符串轉換為字符數組,然後使用foreach循環,在循環體內進行字符比對,代碼如下所示:

<code>public static void main(String[] args) {
String str = "ABC123ABC";

char searchChar = 'B';

int count = 0;
char[] charArray = str.toCharArray();
for (char item : charArray) {
if (item == searchChar) {
count++;
}
}

System.out.println("字符" + searchChar + "出現的次數為:" + count);
}
/<code>

輸出結果如下所示:

字符B出現的次數為:2

但面試題肯定不會這麼簡單,緊接著面試官增加了限制條件:

如果不能使用循環,只使用String自己的方法,如何實現呢?

實現方法有很多種,但我推薦使用replace()方法,很好理解,並且高效,代碼如下所示:

<code>public static void main(String[] args) {
String str = "ABC123ABC";
String searchChar = "B";
int count = 0;

int origialLength = str.length();
str = str.replace(searchChar, "");
int newLength = str.length();

count = origialLength - newLength;

System.out.println("字符" + searchChar + "出現的次數為:" + count);
}
/<code>

而且我覺得,關於面試題:如何判斷一個字符串中某個字符出現的次數?,上面這個實現方法才是面試官真正想聽到的答案。

3. 如何反轉一個字符串?

因為是電話面試,在面了1個小時,面試快結束的時候,面試官問了該問題:

怎麼讓一個字符串反轉?說下思路即可

可能很多同學第一時間想到的思路是下面這樣的:

<code>public static void main(String[] args) {
String str = "ABC123ABC";

StringBuilder stringBuilder = new StringBuilder(str);
stringBuilder.reverse();

String newStr = stringBuilder.toString();

System.out.println("反轉前:" + str);
System.out.println("反轉後:" + newStr);
}
/<code>

但我覺得這肯定不是面試官問這個問題的意圖,所以我當時的回答是下面這樣的:

可以利用數據結構中的棧,因為棧的特點是先入後出(這裡可以提一下和隊列的不同,隊列的特點是先入先出),先把字符串中的每個字符按順序入棧,再依次出棧,即可實現字符串的反轉。

即入棧順序是:A B C 1 2 3 A B C

而出棧順序是:C B A 3 2 1 C B A

轉換成Java代碼是下面這樣的:

<code>public static void main(String[] args) {
String str = "ABC123ABC";

char[] charArray = str.toCharArray();
Stack<character> stack = new Stack<>();
StringBuilder newStr = new StringBuilder();

for (char item : charArray) {
stack.push(item);
}

for (int i = 0; i < charArray.length; i++) {
newStr.append(stack.pop());
}

System.out.println("反轉前:" + str);
System.out.println("反轉後:" + newStr.toString());
}
/<character>/<code>

輸出結果如下所示:

反轉前:ABC123ABC

反轉後:CBA321CBA

4. 感悟

最近的面試,有以下幾點感悟:

  1. 電話面試比視頻面試靠譜視頻面試有點尬的感覺,而且有時會卡頓,相比之下電話面試就不會存在這些問題個人更喜歡電話面試的形式
  2. 面試前多一些準備復工後的第2天,面了第一家公司,完全沒狀態,答的一塌糊塗建議面試前一定要調整好狀態,特別是這次春節在家宅的時間有點長,更要調整
  3. 一定要有的放矢一定要對你所投遞崗位的公司有一定了解,避免面試通過了你又不想去,浪費雙方時間建議對自己投遞的崗位和公司多花點時間去仔細瞭解下

不知道其他同學最近的面試都是什麼形式的,歡迎在評論區一起討論。

來源:https://www.cnblogs.com/zwwhnly/p/12449818.html


分享到:


相關文章: