【Java面试题】关于String,最近被问到了这2道面试题
1. 前言
最近面试了几家公司,体验了一下电话面试和今年刚火起来的视频面试,
虽然之前就有一些公司会先通过电话面试的形式先评估下候选人的能力水平,但好像不多,至少我以前的面试形式100%都是现场面试。
面试过程中,不可避免的被问到了很多面试题,本篇博客就总结下面试过程中被问到的关于String的2道面试题,分别是:
- 如何判断一个字符串中某个字符出现的次数?
- 如何反转一个字符串?
其余的面试题,目前都已梳理出来,后续会以博客的形式进行分享。
2. 如何判断一个字符串中某个字符出现的次数?
在直接问这个问题之前,面试官先问了我下面这个问题:
请说一下String常用的方法有哪些?
该问题其实是考察Java基础,毕竟String类在平时的开发中使用非常广泛,我当时主要说了以下方法:
- length
- equals
- trim
- substring
- concat
- indexOf
- lastIndexOf
- replace
- split
- toLowerCase
- toUpperCase
以上只是面试时我想到的一少部分方法,更多String的方法大家可在IDEA中查看源码,毕竟太多了,如下所示:


在回答完上述问题后,面试官紧接着问了该问题:
如何判断一个字符串中某个字符出现的次数?
听到该问题,我脑海中第一反应是先把字符串转换为字符数组,然后使用foreach循环,在循环体内进行字符比对,代码如下所示:
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);
}
输出结果如下所示:
字符B出现的次数为:2
但面试题肯定不会这么简单,紧接着面试官增加了限制条件:
如果不能使用循环,只使用String自己的方法,如何实现呢?
实现方法有很多种,但我推荐使用replace()方法,很好理解,并且高效,代码如下所示:
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);
}
而且我觉得,关于面试题:如何判断一个字符串中某个字符出现的次数?,上面这个实现方法才是面试官真正想听到的答案。
3. 如何反转一个字符串?
因为是电话面试,在面了1个小时,面试快结束的时候,面试官问了该问题:
怎么让一个字符串反转?说下思路即可
可能很多同学第一时间想到的思路是下面这样的:
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);
}
但我觉得这肯定不是面试官问这个问题的意图,所以我当时的回答是下面这样的:
可以利用数据结构中的栈,因为栈的特点是先入后出(这里可以提一下和队列的不同,队列的特点是先入先出),先把字符串中的每个字符按顺序入栈,再依次出栈,即可实现字符串的反转。
即入栈顺序是:A B C 1 2 3 A B C
而出栈顺序是:C B A 3 2 1 C B A
转换成Java代码是下面这样的:
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());
}
输出结果如下所示:
反转前:ABC123ABC
反转后:CBA321CBA
4. 感悟
最近的面试,有以下几点感悟:
电话面试比视频面试靠谱
视频面试有点尬的感觉,而且有时会卡顿,相比之下电话面试就不会存在这些问题
个人更喜欢电话面试的形式
面试前多一些准备
复工后的第2天,面了第一家公司,完全没状态,答的一塌糊涂
建议面试前一定要调整好状态,特别是这次春节在家宅的时间有点长,更要调整
一定要有的放矢
一定要对你所投递岗位的公司有一定了解,避免面试通过了你又不想去,浪费双方时间
建议对自己投递的岗位和公司多花点时间去仔细了解下
【Java面试题】关于String,最近被问到了这2道面试题的更多相关文章
- 为Java程序员金三银四精心挑选的五十道面试题与答案
1.面向对象的特征有哪些方面? [基础] 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问 ...
- java面试题之----String的intern
When---什么时候需要了解String的intern方法: 面试的时候(蜜汁尴尬)!虽然不想承认,不过面试的时候经常碰到这种高逼格的问题来考察我们是否真正理解了String的不可变性.String ...
- 两道面试题,带你解析Java类加载机制
文章首发于[博客园-陈树义],点击跳转到原文<两道面试题,带你解析Java类加载机制> 在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Gr ...
- 【转】两道面试题,带你解析Java类加载机制(类初始化方法 和 对象初始化方法)
本文转自 https://www.cnblogs.com/chanshuyi/p/the_java_class_load_mechamism.html 关键语句 我们只知道有一个构造方法,但实际上Ja ...
- 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制
你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...
- java内存分配和String类型的深度解析
[尊重原创文章出自:http://my.oschina.net/xiaohui249/blog/170013] 摘要 从整体上介绍java内存的概念.构成以及分配机制,在此基础上深度解析java中的S ...
- Java中ArrayList相关的5道面试题
本文参考了 <关于ArrayList的5道面试题 > 1.ArrayList的大小是如何自动增加的? 这个问题我想曾经debug过并且查看过arraylist源码的人都有印象,它的过程是: ...
- Java基础知识强化47:StringBuffer类之StringBuffer的三个面试题
1. 面试题:String,StringBuffer,StringBuilder的区别 ? 答:String是字符串内容不可变的,而StringBuffer和StringBuilder是字符串内容长度 ...
- 跟着刚哥梳理java知识点——深入理解String类(九)
一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码: public final class String implements java.io.Ser ...
随机推荐
- Linux安装vmtools工具
1.vmware菜单中虚拟机下安装vmtools: 2.将/mnt/cdrom/下的文件copy至可读写的文件夹下,此处我选择downloads目录下(如果提示此文件夹只为可读文件夹时) 3.使用ta ...
- The Maximum Unreachable Node Set
题目描述 In this problem, we would like to talk about unreachable sets of a directed acyclic graph G = ( ...
- git实用手册
git.exe clone --progress -v "git@code.sohuno.com:huimingtao/focus-wap.git" "D:\worksp ...
- Nginx 反向代理,IP、端口,项目路径变化的问题
这两天在云上部署公司项目,涉及到nginx反向代理,在部署完成测试,发现在下载文件的时候,无法下载,提示链接被拒绝. 假设nginx代理地址: http://121.53.21.188:9012/we ...
- ArcGIS Server10.2忘记密码怎么办?重置ArcGIS Server Manager密码
忘记了ArcGIS Server Manager的密码不要慌张,下面简单的几步就可以重置密码. 第一步:找到ArcGIS Server的安装目录,然后找到..\ArcGIS\Server\tools\ ...
- Windows 10操作系统针对不同环境下的安装方法
一.电脑系统能正常运行 1.解压win10镜像文件 到电脑的非系统分区,运行setup安装文件 2.点击setup应用程序,准备安装 3.准备安装 4.等待安装过程结束,重启即可. 二.光盘安装 1. ...
- [LC] 318. Maximum Product of Word Lengths
Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...
- 吴裕雄--天生自然python学习笔记:Python3 数据结构
列表 Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能. list.append(x) 把一个元素添加到列表的结尾,相当于 a[len ...
- 控制webbrowser滚动到指定位置
在构造函数中添加事件: webBrowser.DocumentCompleted+=new WebBrowserDocumentCompletedEventHandler(webBrowser_Doc ...
- IPFS问题总结
1.安装包下载 ipfs安装版本下载:https://github.com/ipfs/go-ipfs/releases,这是IPFS的go语言实现版,目前实现的还有js版本. 2.安装与启动 linu ...